【概述】
本人正在学习android开发,最近在练习android自定义广播的时候,发现广播怎么也接收不到。甚是奇怪,看到网上也有很多同学遇到同样的问题。今天特别总结一下,以供大家参考。当然如有纰漏错误,望各位指正。
本次讨论的是广播访问的权限问题,对于显示或者隐式的问题,不在这里赘述。
【版本】
API版本为v21
【问题概述】
我先介绍一下我学习的例子。非常简单,通过一个button触发一个自定广播。
代码如下。
1 public class MyBroadcastReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 Log.i("TEST", "received in MyBroadcastReceiver"); 6 7 Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_LONG).show(); 8 } 9 10 }
界面部分就是一个button,这里就略了。
button逻辑如下:
因为安全问题,所以设置了接收权限。sendBroadcast的第二个参数为, com.example.broadcasttest.RECV_MYBC.(这个也是本次问题的原因)
PS:如果不设置访问权限,会有Exported receiver does not require permission告警。原因是第三方应用可以通过发送该广播触发该逻辑,从而产生安全风险。具体细节可以百度一下。
com.example.broadcasttest.MY_BROADCAST为自定义的广播。
public class MainActivity extends Activity { private Button buttonSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonSend = (Button)findViewById(R.id.button_send); buttonSend.setOnClickListener(new OnClickListener() { // // 触发自定的广播,广播定义为com.example.broadcasttest.MY_BROADCAST // 设置接收权限为RECV_MYBC // @Override public void onClick(View v) { Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); sendBroadcast(intent,"com.example.broadcasttest.RECV_MYBC"); } }); } }
AndroidManifast.xml中,也对这个receiver添加权限。
<receiver android:name="com.example.broadcasttest.MyBroadcastReceiver" android:permission="com.example.broadcasttest.RECV_MYBC" > <intent-filter> <action android:name="com.example.broadcasttest.MY_BROADCAST" /> </intent-filter> </receiver>
现象是广播接受失败。
【问题根因】
这里的权限没有申明,凡是自定义的权限是需要在AndroidManifast.xml中定义的。
【解决方案】
在AndroidManifest.xml中添加自定义权限的权限申明和权限使用
<permission android:name="com.example.broadcasttest.RECV_MYBC" android:protectionLevel="normal" /> <uses-permission android:name="com.example.broadcasttest.RECV_MYBC" />
注意几点:
1. 不设置访问权限是可以成功的。权限不是必须的。
2. 自定义权限的名字要带上包名,不带包名可能是有问题的。
练习代码下载:
http://download.csdn.net/detail/mimiduck/9430272
时间: 2024-10-06 05:01:26