Development Tip

android : 화면 켜고 끄기를위한 방송 수신기

yourdevel 2020. 12. 12. 12:34
반응형

android : 화면 켜고 끄기를위한 방송 수신기


응용 프로그램 매니페스트에서 화면 ON / OFF를 감지하는 방송 수신기를 등록 할 수 있는지 궁금합니다. 프로그래밍 가능한 메서드가 마음에 들지 않는 이유는 이러한 것을 감지하기 위해 앱을 실행해야하기 때문입니다. "매니페스트에 등록 된 브로드 캐스트 수신기가있는 응용 프로그램은 인 텐트가 실행 중일 때 실행될 필요가 없습니다. 수신기가 실행할 수 있도록 브로드 캐스트 "(출처 : Professional Android 2 Application Development 책)

내 앱은 실제로 프로그래밍 가능한 방식을 사용하여 항상 실행되어야하는 잠금 화면 앱입니다.

주위에 방법이 있습니까?

매니페스트에서 다음을 시도하고 있습니다.

<receiver android:name=".MyBroadCastReciever">
    <intent-filter>
        <action android:name="android.intent.action.SCREEN_OFF"/>
        <action android:name="android.intent.action.SCREEN_ON"/>
    </intent-filter>
</receiver>

그리고 간단한 MyBroadCastReciever 클래스 :

public class MyBroadCastReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            Log.i("Check","Screen went OFF");
            Toast.makeText(context, "screen OFF",Toast.LENGTH_LONG).show();
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            Log.i("Check","Screen went ON");
            Toast.makeText(context, "screen ON",Toast.LENGTH_LONG).show();
        }
    }
}

화면을 켜고 끄는 두 가지 작업은 다음과 같습니다.

android.intent.action.SCREEN_OFF
android.intent.action.SCREEN_ON

그러나 매니페스트에서 이러한 브로드 캐스트에 대한 수신기를 등록하면 수신기는 이러한 브로드 캐스트를 수신하지 않습니다.

이 문제의 경우 이러한 인 텐트에 대한 로컬 브로드 캐스트 수신기를 등록하는 장기 실행 서비스를 만들어야합니다. 이 방법을 사용하면 서비스가 실행 중일 때만 앱에서 화면이 꺼져서 사용자를 괴롭히지 않습니다.

추신 : 서비스를 포 그라운드에서 시작하여 더 오래 실행되도록합니다.

간단한 코드 스 니펫은 다음과 같습니다.

IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mScreenStateReceiver, screenStateFilter);

서비스onDestroy 에서 수신자를 등록 취소하는 것을 잊지 마십시오 .

unregisterReceiver(mScreenStateReceiver);

수신기가 ACTION_SCREEN_ON 및 ACTION_SCREEN_OFF에 대한 매니페스트의 선언 브로드 캐스트와 함께 작동하지 않는 이유를 묻는 사람들을 위해 :

https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF

Context.registerReceiver ()로 명시 적으로 등록해야만 매니페스트에 선언 된 구성 요소를 통해이를받을 수 없습니다.

이것은 시스템에서만 보낼 수있는 보호 된 인 텐트입니다.


이를 확인하려면 백그라운드 서비스를 만들어야합니다. 그런 다음 프로그래밍 방식으로 설정할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/9477922/android-broadcast-receiver-for-screen-on-and-screen-off

반응형