具有权限级别签名的Android广播接收器不接收广播
Posted
技术标签:
【中文标题】具有权限级别签名的Android广播接收器不接收广播【英文标题】:Android Broadcast Reciever with permissionLevel signature not receiving broadcasts 【发布时间】:2021-07-14 23:35:15 【问题描述】:我有 2 个应用程序 signprotectbroadcast 和 broadcastsender
在signprotectbroadcast中,我注册了一个Receiver
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.signprotectbroadcast">
<permission android:name="PERMISSION_OP"
android:protectionLevel="signature"
android:label="PERMISSION">
</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/Theme.SignProtectBroadcast">
<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=".MyReciever"
android:enabled="true"
android:exported="true"
tools:ignore="ExportedReceiver"
android:permission="PERMISSION_OP">
<intent-filter>
<action android:name="ACTION_OP" />
</intent-filter>
</receiver>
</application>
</manifest>
在应用程序broadcastsender中我请求Manifest
中的权限<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcastsender">
<uses-permission android:name="PERMISSION_OP"/>
<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/Theme.BroadCastSender">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
并像这样发送广播
sendBtn.setOnClickListener
val intent = Intent()
intent.action = "ACTION_OP"
intent.component = ComponentName("com.example.signprotectbroadcast", "com.example.signprotectbroadcast.MyReciever" )
sendBroadcast(intent, "PERMISSION_OP")
在运行发布版本变体时,我还创建了一个常见的 keystore,但这根本不起作用,尝试了所有方法。
一旦我从 receiver 块以及 sendBroadCast
函数中删除 permission,就会正确接收 broadcast。
谁能指出我在哪里调试为什么没有收到这个广播或者如何调试这个?
【问题讨论】:
将发送广播的应用需要声明权限,以及声明它使用的权限;
发送应用:broadcastsender(声明并使用权限)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcastsender">
<permission android:name="PERMISSION_OP"
android:protectionLevel="signature"
android:label="PERMISSION"/>
<uses-permission android:name="PERMISSION_OP"/>
<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/Theme.BroadCastSender">
<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>
用法:
sendBtn.setOnClickListener
val intent = Intent()
intent.action = "ACTION_OP"
intent.component = ComponentName("com.example.signprotectbroadcast", "com.example.signprotectbroadcast.MyReciever" )
sendBroadcast(intent, "PERMISSION_OP")
接收应用:signprotectbroadcast(仅使用权限)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.signprotectbroadcast">
<uses-permission android:name="PERMISSION_OP"/>
<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/Theme.SignProtectBroadcast">
<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=".MyReciever"
android:enabled="true"
android:exported="true"
tools:ignore="ExportedReceiver"
android:permission="PERMISSION_OP">
<intent-filter>
<action android:name="ACTION_OP" />
</intent-filter>
</receiver>
</application>
</manifest>
【讨论】:
以上是关于具有权限级别签名的Android广播接收器不接收广播的主要内容,如果未能解决你的问题,请参考以下文章