广播相关的基础知识在这里我就不详述了,这里我主要是总结下在使用广播时接收不到广播的几种原因。当然,这里只是我个人学习和使用广播的一些个人经验,可能存在不准确或不全的地方,希望看到这篇播客的朋友能够指正、补充,让后面学习的人能够少走弯路,更好更快的学习。
一个广播包含三部分:注册、发送、接收。当你这三部分都包含了,但是还是接收不到广播的话,就很有可能是出现以下问题中的一种或多种。
一、没有添加权限。例如:开机启动的广播,这是一个系统广播,出于安全考虑,系统要求必须声明接收开机启动广播的权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
如果接收不到广播,你首先可以查看下你是否声明了权限。当然如果是不需要声明权限的广播,则不需要考虑。
二、注册方式不正确。有的系统广播必须动态注册才能生效,例如:系统时间流逝广播。因此,在你使用系统广播时,一定要查清楚该广播的注册方式是只能动态注册还是动态、静态 注册都可以。
三、android4.0以上版本,该广播应用没有运行过或在设置中强制停止了应用。这是Google采用的新机制,在一定程度上避免垃圾软件、病毒。所以广播应用接收不到,你想想是否 运行过、设置中是否强制停止了应用。
四、被安全软件强制杀掉进程。如果前面几种情况都没有解决问题,那么你的广播应用很有可能被你手机安装的安全软件给强制杀掉进程了。
以上四点就是我在学习、使用广播过程总结的四种可能导致你接收不到广播的原因。当然,这是在你基本的注册、发送、接收代码没有问题的情况下。
下面我把系统时间流逝广播的例子给大家贴出来:
注册发送广播代码:
MyReceiver myReceiver = new MyReceiver(); //这是自定义的接收广播类,继承BroadcastReceiver
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
registerReceiver(myReceiver, filter);
接收广播代码(onReceive方法中):
if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) {
//这里就是你的逻辑代码了
}
很简单,系统时间流逝广播的关键代码就这么多。值得注意的是Intent.ACTION_TIME_TICK,这个一定不能写错,网上有不少系统时间流逝广播的相关代码是不正确的。