本篇博客主要介绍如何解决Android7.0新增的广播权限验证问题,这个还得从一个项目上说起,在项目上需要使用广播进行跨进程通信,在7.0之前的版本测试都是OK,在7.0上搞死接收不到发送的广播,关键不是这个,关键是广播因为权限问题被拒接,系统不会报错,也不会抛异常(因为异常被内部捕获了,错了都不知道错在哪,真是坑!!),最后在输出的log中进行全局搜索才确定的问题所在!!!
解决方法其实很简单,就是在广播接受者所在的进程声明一个权限,在广播的发送者所在的进程内注册使用该权限,这样问题就可以解决了(这种广播权限问题只存在跨进程静态注册广播的方式上,动态注册的广播好像不存在这种问题!!!)
在这里就不给出java代码了,只给出AndroidManifest文件:
接受者的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.permissionbroadcastreceiver">
<permission
android:name="com.example.broadcast.permission"
android:protectionLevel="normal" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".PermissionRecevicer"
android:permission="com.example.broadcast.permission">
<intent-filter>
<action android:name="com.example.permissionbroadcastreceiver.message" />
</intent-filter>
</receiver>
</application>
</manifest>
在清单文件中声明一个权限,然后在receiver中要求发送者具有此权限,这样广播接受者进程就算是准备完成了!!
广播发送者的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.permissionbroadcast">
<uses-permission android:name="com.example.broadcast.permission" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
在清单文件请求刚才在接收者清单文件声明的权限即可,这里的运行结果就不展示了,只是log而已!!!
好了,这样就可以解决广播接收没有权限的问题了!!
这是我的微信公众号,如果可以的话,希望您可以帮忙关注一下,这将是对我最大的鼓励了,谢谢!!
代码地址: