public class PoService extends Service{
int mStartMode; // indicates how to behave if the service is killed
IBinder mBinder; // interface for clients that bind
boolean mAllowRebind; // indicates whether onRebind should be used
private ScreenStatusReceiver mReceiver;
@Override
public void onCreate() {
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new ScreenStatusReceiver();
registerReceiver(mReceiver, filter);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// The service is starting, due to a call to startService()
return mStartMode;
}
@Override
public IBinder onBind(Intent intent) {
// A client is binding to the service with bindService()
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
// All clients have unbound with unbindService()
return mAllowRebind;
}
@Override
public void onRebind(Intent intent) {
// A client is binding to the service with bindService(),
// after onUnbind() has already been called
}
@Override
public void onDestroy() {
// The service is no longer used and is being destroyed
if (mReceiver != null) {
unregisterReceiver(mReceiver);
mReceiver = null;
}
}
}
BroadcastReceiver
public class ScreenStatusReceiver extends BroadcastReceiver {
public static boolean wasScreenOn = true;
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
wasScreenOn = false;
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
wasScreenOn = true;
}
}
}
The use of broadcast in Service is the same as that in Activity. Just register it in onCreate and unbind it in onDestroy. It's just that these two broadcasts are special. They cannot be registered statically, but can only be registered dynamically. That is, it will not work if you register this broadcast monitoring in the manifest. This is why the demo you wrote yourself cannot print out the log. Intent.ACTION_SCREEN_ON与Intent.ACTION_SCREEN_OFF
Brother, under what circumstances do you want to monitor the screen status? ?
1. If you want to monitor all the time, you have to enable the service
Configuration in Manifest
Service
BroadcastReceiver
Log
2. If not, let me give you an example of getting the screen status in Activity
Activity
Log
This part of the code is placed on github
The use of broadcast in Service is the same as that in Activity. Just register it in onCreate and unbind it in onDestroy. It's just that these two broadcasts are special. They cannot be registered statically, but can only be registered dynamically. That is, it will not work if you register this broadcast monitoring in the manifest. This is why the demo you wrote yourself cannot print out the log.
Intent.ACTION_SCREEN_ON
与Intent.ACTION_SCREEN_OFF