Android 4.0新的广播机制FLAG_EXCLUDE_STOPPED_PACKAGES
来源:互联网 发布:伊芙蕾雅淘宝店 编辑:程序博客网 时间:2024/06/10 16:58
问题:
第三方app调起失败,当然,这个是只发现是在4.x的android系统下发生,在2.x版本下,一切正常,(其实是3.1及以上的版本都有问题)具体场景为:
1、第三方App安装成功但未启动,试图从App通过sendBroadcast方式调起:失败
2、第三方App的进程被用户强制杀掉,试图从App通过sendBroadcast方式调起:失败
3、第三方App处于启动状态,试图从App通过sendBroadcast方式调起:成功
看了一下调起第三方app的代码逻辑,是这样的:
Intent intent = new Intent("com.hahaha.action.INVOKE");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.putExtra("type", "frs");intent.putExtra("fname", "hahaha");activity.sendBroadcast(intent);
于是直接定位问题:必定是高版本的android系统,在发送广播的适合,无法调起未启动(处于停止状态)的的App,打开官方文档查了一下: http://developer.android.com/about/versions/android-3.1.html#launchcontrols 写的很明白,大概意思是:
从Android 3.1开始,给Intent定义了两个新的Flag,分别为FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES,用来控制Intent是否要对处于停止状态的App起作用,顾名思义:
FLAG_INCLUDE_STOPPED_PACKAGES:表示包含未启动的App
FLAG_EXCLUDE_STOPPED_PACKAGES:表示不包含未启动的App
值得注意的是,Android 3.1开始,系统向所有Intent的广播添加了FLAG_EXCLUDE_STOPPED_PACKAGES标志。这样做是为了防止广播无意或不必要地开启未启动App的后台服务。如果要强制调起未启动的App,后台服务或应用程序可以通过向广播Intent添加FLAG_INCLUDE_STOPPED_PACKAGES标志来唤醒,示例代码:
Intent intent = new Intent("com.hahaha.action.INVOKE"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addFlags(Intent. FLAG_INCLUDE_STOPPED_PACKAGES);intent.putExtra("type", "frs");intent.putExtra("fname", "hahaha");activity.sendBroadcast(intent);
如果你的项目依赖的Android SDK是3.1以下版本,那么直接像上面这样写是会出问题的,你会发现Intent.FLAG_INCLUDE_STOPPED_PACKAGES无法被正确识别,所以相对安全的办法是,直接把value写进来:
Intent intent = new Intent("com.hahaha.action.INVOKE"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 3.1以后的版本直接设置Intent.FLAG_INCLUDE_STOPPED_PACKAGES的value:32if (android.os.Build.VERSION.SDK_INT >= 12) { intent.setFlags(32);}intent.putExtra("type", "frs");intent.putExtra("fname", "hahaha");activity.sendBroadcast(intent);
- Android 4.0新的广播机制FLAG_EXCLUDE_STOPPED_PACKAGES
- Android 4.0新的广播机制FLAG_EXCLUDE_STOPPED_PACKAGES
- Android 3.1新的广播机制
- 【android】3.0以后系统给广播默认加上FLAG_EXCLUDE_STOPPED_PACKAGES标记
- FLAG_EXCLUDE_STOPPED_PACKAGES导致接受不到广播
- Android的广播机制
- android的广播机制
- Android的广播机制
- Android的广播机制
- Android的广播机制注册
- android广播机制的实现
- Android的广播机制介绍
- Android的广播机制介绍
- android的广播机制简介
- Android系统的广播机制
- Android广播的超时机制
- Android广播机制——广播的注册
- Android广播机制——广播的发送
- iOS获取控制器里面的控件
- Spring入门——Resource
- Hibernate 笔记大全二
- a href=#与 a href=javascript:void(0) 的区别
- logstash grok
- Android 4.0新的广播机制FLAG_EXCLUDE_STOPPED_PACKAGES
- Codeforces 765D Artsem and Saunders 构造
- LeetCode 8. String to Integer (atoi)
- retrofit 学习和使用
- CI3框架初识-钩子
- nginx 日志配置与分割
- AndroidManifest.xml 清单文件
- Linux NTP config
- iOS设计模式-建造者模式