First, I've tried create a receiver to receive screen on/off and register receiver on AndroidManifest.xml like below, but unfortunately it does not work.
ScreenReceiver.javaAndroidManifest.xml
- package com.prhythm.training.service;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- /**
- * Created by Bruce on 7/15/2014.
- */
- public class ScreenReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d("Receiver", String.format("Broadcast action: %s", intent.getAction()));
- }
- }
- <receiver android:name=".service.ScreenReceiver">
- <intent-filter>
- <action android:name="android.intent.action.SCREEN_ON"/>
- <action android:name="android.intent.action.SCREEN_OFF"/>
- </intent-filter>
- </receiver>
I's nessary to register screen action receiver by code, so I've change the as
ScreenReceiver.javaScreenService.java
- package com.prhythm.training.service;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- /**
- * Created by Bruce on 7/15/2014.
- */
- public class ScreenReceiver extends BroadcastReceiver {
- public static ScreenReceiver CURRENT;
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d("Receiver", String.format("Broadcast action: %s", intent.getAction()));
- }
- }
- package com.prhythm.training.service;
- import android.app.Service;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.IBinder;
- /**
- * Created by Bruce on 7/15/2014.
- */
- public class ScreenService extends Service {
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- @Override
- public void onCreate() {
- // Register screen on/off receiver
- if (ScreenReceiver.CURRENT == null) ScreenReceiver.CURRENT = new ScreenReceiver();
- getApplicationContext().registerReceiver(ScreenReceiver.CURRENT, new IntentFilter(Intent.ACTION_SCREEN_ON));
- getApplicationContext().registerReceiver(ScreenReceiver.CURRENT, new IntentFilter(Intent.ACTION_SCREEN_OFF));
- }
- }
Then, start this service is required
- startService(new Intent(this, ScreenService.class));