我是靠谱客的博主 阳光金鱼,最近开发中收集的这篇文章主要介绍android receiver静态注册,静态注册BroadcastReceiver的那些事,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

众所周知有两种方式去注册BroadcastReceiver,下面主要谈谈静态注册方式。

先抛出问题:

我想要 即使我的APP退出后仍然可以接收到广播,从而做我想做的事。

我想要 我的APP一安装就可以接收到广播,不用非得启动一下。

静态方式注册receiver,不就是解决上述问题的么?问动态注册和静态注册的区别,我们毫不犹豫的就回答说静态方式注册在APP退成后仍然能接收到广播。但是事实真的是这样么?

show me the code !

####静态注册receiver

包名为cn.com.ada的ReceiverApp中通过静态方式注册了广播接收者MyReceiver,监听action为cn.com.ada.test的广播。

android:name="cn.com.ada.MyReceiver"

android:enabled="true"

android:exported="true">

复制代码

####发送广播

包名为cn.com.ada1的SendApp中发送广播。

Intent intent = new Intent("cn.com.ada.test");

sendBroadcast(intent);

复制代码

测试发现:

当初次安装后,如果不启动ReceiverApp,是收不到广播的。

在设置应用管理中的应用详情页点击强制停止或者

使用 adb shell am force-stop package-name命令停止ReceiverApp后,也是收不到广播的。

####这是因为

从 Android 3.1 开始,系统为所有的广播都默认添加了FLAG_EXCLUDE_STOPPED_PACKAGES 标志。所有处于停止状态的应用将无法接受到该标志的广播。注意,只有两种情况下应用才会处于停止状态:

应用安装后未运行

应用被手动(设置-应用-强制停止)或者被其他应用强制停止了

如果需要启动处于停止状态的应用,则只要为Intent添加FLAG_INCLUDE_STOPPED_PACKAGES 标记即可。

Intent intent = new Intent("cn.com.ada.test");

intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);

sendBroadcast(intent);

复制代码

这样才算真正实现了静态注册receiver,程序退出后仍然可以接收广播。

####TODO

测试中发现一个问题,ReceiverApp运行时崩溃,弹出“ReceiverApp停止运行”的提示框,这时点击确定后,依然可以接收广播。但是,有时不会弹出提示框直接闪退,这时就接收不到广播了。不知是何原因?

最后

以上就是阳光金鱼为你收集整理的android receiver静态注册,静态注册BroadcastReceiver的那些事的全部内容,希望文章能够帮你解决android receiver静态注册,静态注册BroadcastReceiver的那些事所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部