标签:oid 处理 模拟 alt 展示 需求 scree 添加 als
Android8.0版本开始,对静态注册广播事件做了限制。但开发中,有时候却需要实现在后台长期运行一些广播事件的监听,处理一些业务。如:时间的监听。
既然Google对配置文件中静态注册做了限制,那我们该如何在后台长期维护一个监听事件呢?下面咱们就来一起学习下吧。
需求:应用A实现对屏幕开、关的监听,且要求即便应用A退出后,依然可以监听到屏幕的开、关事件(以Log打印为例)
//定义一个特殊的广播接收者:监听特殊广播。如:屏幕的开与关
public class SpecialListenerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取广播事件类型
String action = intent.getAction();
if ((Intent.ACTION_SCREEN_ON).equals(action)) {
Log.e("特殊的广播", "开...");
} else if ((Intent.ACTION_SCREEN_OFF).equals(action)) {
Log.e("特殊的广播", "关...");
}
}
}
//为监听:特殊广播 而创建的服务
public class SpecialListenerService extends Service {
private SpecialListenerReceiver listenerReceiver;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
//创建一个意图过滤器对象,并添加广播事件
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
listenerReceiver = new SpecialListenerReceiver();
//注册广播事件
this.registerReceiver(listenerReceiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
if(listenerReceiver!=null){
this.unregisterReceiver(listenerReceiver);
}
}
}
<service android:name=".SpecialListenerService" />
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, SpecialListenerService.class);
this.startService(intent);//开启服务
Log.e("特殊的广播", "MainActivity的【onCreate】方法执行");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("特殊的广播", "MainActivity的【onDestroy】方法执行");
}
}
Log 打印展示
Surface: getSlotFromBufferLocked: unknown buffer: 0xb40bd840是我使用模拟器的原因,忽略即可。
标签:oid 处理 模拟 alt 展示 需求 scree 添加 als
原文地址:https://www.cnblogs.com/io1024/p/11574240.html