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
'Development Tip' 카테고리의 다른 글
ini_set ( 'max_execution_time', 0) 나쁜 생각입니까? (0) | 2020.12.12 |
---|---|
IP 주소를 대상으로하는 Powershell 원격 (0) | 2020.12.12 |
자바 스크립트 사용 : 탭이나 창에 대한 기록이없는 경우 사용자를 링크로 연결하는 '뒤로'링크를 만드는 방법은 무엇입니까? (0) | 2020.12.12 |
언제 Object.defineProperty ()를 사용합니까? (0) | 2020.12.12 |
C의 템플릿 시뮬레이션 (큐 데이터 유형용) (0) | 2020.12.12 |