A,在activity开启服务:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//开启服务
Intent intent = new Intent(this,ScreenService.class);
startService(intent);
}
B,在服务中动态注册广播接受者 ,在服务onDestroy解除Receiver 动态注册不要在AndroidManifest
public class ScreenService extends Service {
private ScreenReceiver screenReceiver;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// 当服务创建的时候 在这个方法里面去注册广播接收者
// [1]获取ScreenReceiver实例
screenReceiver = new ScreenReceiver();
// [2]创建意图过滤器
IntentFilter filter = new IntentFilter();
// [3]添加action
filter.addAction("android.intent.action.SCREEN_OFF");
filter.addAction("android.intent.action.SCREEN_ON");
// [4]注册广播接收者
registerReceiver(screenReceiver, filter);
}
@Override
public void onDestroy() {
//当服务销毁的时候 要取消注册广播接收者
unregisterReceiver(screenReceiver);
super.onDestroy();
}
}
C, 在Receiver 接收系统发出来的广播。判断是否开屏幕
public class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//[1]获取广播的事件类型
String action = intent.getAction();
if ("android.intent.action.SCREEN_OFF".equals(action)) {
System.out.println("屏幕关闭了");
}else if ("android.intent.action.SCREEN_ON".equals(action)) {
System.out.println("说明亮了");
}
}
}