首页 > 编程知识 正文

Dev Channel,android静态广播

时间:2023-05-05 08:33:13 阅读:134142 作者:364

问题:

第三方APP启动失败。 当然,我发现这只发生在4.x的安卓系统上。 在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.add flags (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。

从Android 3.1开始,Intent中定义了两个新的标志。 分别由FLAG_INCLUDE_STOPPED_PACKAGES和FLAG_EXCLUDE_STOPPED_PACKAGES控制Intent的外观

FLAG_INCLUDE_STOPPED_PACKAGES :表示包含未启动的App

FLAG_EXCLUDE_STOPPED_PACKAGES :指示不包含未启动的App

值得注意的是,从Android 3.1开始,系统已将FLAG_EXCLUDE_STOPPED_PACKAGES标志添加到所有Intent广播中。 这是为了避免不必要地打开广播无意或未启动APP的后台服务。 如果强制启动未启动的App,则可以通过向广播Intent添加FLAG_INCLUDE_STOPPED_PACKAGES标志来启动后台服务或App应用程序。 示例代码:

intent intent=new intent (com.hahaha.action.invoke );

intent.add flags (intent.flag _ activity _ new _ task );

intent.add flags (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.add flags (intent.flag _ activity _ new _ task );

//3.1或更高版本直接设置intent.flag _ include _ stopped _ packages的value:32

Android.OS.build.version.SDK _ int=12 {

intent.setflags(32;

}

intent.putextra('type ',' frs ' );

intent.putextra('Fname ',' hahaha ' );

activity.sendBroadcast(intent );

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。