APP在未启动的情况下无法收到静态广播

最近项目上遇到了一个需求,APP在未启动时需要后台进行一些初始化操作,即在未点击应用launcher图标时,已经在后台运行了。首先想到的就是桌面级应用可以通过注册静态广播被系统级应用主动拉起。

  1. 思考:初始化工作可以放在桌面级应用的Application中进行,系统应用在发送静态广播后,Android 系统会检索已安装应用注册的所有静态广播,找到之后,系统先执行该应用Application中的oncreate方法,然后执行BroadcastReceiver中的onReceiver方法,此过程即可达到目的。
  2. 但现象是:程序安装后,在未启动的情况下无法接收到系统的广播;但在启动一次后,就能够正常收到系统广播。
  3. 查阅资料后了解到,从Android 3.1开始,系统给Intent定义了两个新的Flag,分别为:
		 FLAG_INCLUDE_STOPPED_PACKAGES(表示包含未启动的App)
		 FLAG_EXCLUDE_STOPPED_PACKAGES(表示不包含未启动的App),
		 用来控制Intent是否要对处于停止状态的App起作用,具体的操作方式如下`:
	(1)在发送广播的应用中添加如下代码段:
		Intent intent = new Intent();
		intent.setAction("com.iflytek.cutefly.speechclient");
		intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
		sendBroadcast(intent);
	(2)在需要接收广播的应用中静态注册广播,并定义好action,并且
	需要指定android:exported="true";
		<receiver android:name=".receiver.BootReceiver"
		   android:exported="true">
		   <intent-filter>
		        <action android:name="com.iflytek.cutefly.speechclient"/>
		   </intent-filter>
		 </receiver>
	(3)最后,切记生成的apk需要push到系统system/app目录中。
发布了15 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u013769274/article/details/102601793