Android应用在未启动的情况下无法收到指定广播的问题总结
来源:互联网 发布:高斯滤波算法matlab 编辑:程序博客网 时间:2024/06/12 01:37
最近在做一个需求:程序没有桌面图标,安装后能够自动将其插件添加到Launcher上,也就是程序在未启动的情况下,能够完成一些操作。
能够想到的方案是在AndroidMainifest.xml中静态注册一个广播,监听系统的某些广播达到触发应用完成操作的目的,但现象是:程序安装后,在未启动的情况下无法接收到系统的广播;但在启动一次后,就能够正常收到系统广播。
通过查阅资料发现,这个问题只有在Android 3.1及以上的版本才会出现,我用的是4.2.2的版本测试,自然会有这个问题,具体原因是:从Android3.1开始,新安装的程序会被置于"stopped"状态,并且只有在至少手动启动这个程序一次后该程序才会改变状态,能够正常接收到指定的广播消息。Android这样做的目的是防止广播无意或者不必要地开启未启动的APP后台服务。
也就是说在Android3.1及以上的版本,在未启动的情况下通过应用自身完成一些操作是不可能的,但Android提供了一种借助其它应用发送指定Flag广播的方式,达到应用在未启动的情况下仍然能够收到消息的效果。
从Android 3.1开始,系统给Intent定义了两个新的Flag,分别为FLAG_INCLUDE_STOPPED_PACKAGES(表示包含未启动的App)和FLAG_EXCLUDE_STOPPED_PACKAGES(表示不包含未启动的App),用来控制Intent是否要对处于停止状态的App起作用,具体的操作方式如下:
1.在需要接收广播的应用中静态注册广播,并定义好action,并且需要指定android:exported="true";
<receiver android:name=".receiver.UpdateWidgetReceiver" android:exported="true"> <intent-filter> <action android:name="com.uperone.widget.action"/> </intent-filter></receiver>
2.在发送广播的应用中添加如下代码段:
Intent intent = new Intent();intent.setAction("com.uperone.widget.action");intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);sendBroadcast(intent);
阅读全文
0 0
- Android应用在未启动的情况下无法收到指定广播的问题总结
- Android应用在未启动的情况下无法收到指定广播的问题总结
- Android应用在未启动的情况下无法收到指定广播的问题总结
- Android应用在未启动的情况下无法收到指定广播的问题总结
- Android应用在安装后未启动的情况下无法收到开机等各类广播
- Android无法收到指定广播的问题总结
- android系统应用在未root的情况下启动root权限命令方法
- android.intent.action.MEDIA_MOUNTED广播无法收到的问题
- android.intent.action.MEDIA_MOUNTED广播无法收到的问题
- 未启动的应用无法监听到系统广播
- 未启动的应用无法监听到系统广播
- 解决小米手机无法收到开机广播的问题
- 解决小米手机无法收到开机广播的问题
- android 应用无法收到开机广播,无法收到sd卡MOUNTED广播
- Openoffice在redflag6下指定路径安装无法启动的问题
- android 广播在4.0+系统上无法接受的问题
- CFG-ERR-0106 IBM Cognos Configuration在指定时间内未收到IBM Cognos服务的响应。
- [已解决] 收到广播无法启动activity
- linux 学习系列-Linux 介绍
- Rust初识
- 多线程编程之线程间的通信——管道通信
- redis 消息发布订阅与消息队列
- 消除RGB受光照影响
- Android应用在未启动的情况下无法收到指定广播的问题总结
- HEVC学习(三) —— 帧内预测系列之一
- 可能是 Android 平台上最快的图片压缩框架
- BZOJ1079 着色方案(高维DP+神奇的状态)
- 教你如何从一个普通程序员,两年做到月薪 20 K+
- 重建smon_scn_time表和索引
- App.Config详解及读写操作
- so包问题汇总 PathClassLoader ** couldn't find; dlopen failed is 32-bit
- Mysql数据库连接———JDBC,Java代码