Sender:sender是否具有某种Permission与所处的Package申明有关,与sendBroadcast方法是相互独立的。sendBroadcast可以要求接受方需要具备什么Permission。
Receiver: receive是否具有某种Permission与所处的Package申明有关, 与registerReceiver方法是相互独立的。registerReicerver可以要求发送方需要具备什么Permission。
Package | In Permission | In Permission | No permission | No permission | |
Package | Receiver\sendBroadcast | Send not require P | Send require P | Send not require P | Send require P |
In Permission | Declared require P | onReceive | onReceive | Permission Denial: broadcasting Intent | Permission Denial: broadcasting Intent |
In Permission | Declared not require P | onReceive | onReceive | onReceive | onReceive |
In Permission | Dynamic require P | onReceive | onReceive | Permission Denial: broadcasting Intent | Permission Denial: broadcasting Intent |
In Permission | Dynamic not require P | onReceive | onReceive | onReceive | onReceive |
No Permission | Declared require P | onReceive | Permission Denial: receiving Intent | Permission Denial: broadcasting Intent | Permission Denial: broadcasting Intent Permission Denial: receiving Intent |
No Permission | Declared not require P | onReceive | Permission Denial: receiving Intent | onReceive | Permission Denial: receiving Intent |
No Permission | Dynamic require P | onReceive | Permission Denial: receiving Intent | Permission Denial: broadcasting Intent | Permission Denial: broadcasting Intent Permission Denial: receiving Intent |
No Permission | Dynamic not require P | onReceive | Permission Denial: receiving Intent | onReceive | Permission Denial: receiving Intent |
Receiver是Declared或Dynamic的对结果并无影响。上述表格可以简化为
| Package | In Permission | In Permission | No permission | No permission |
Package | Receiver\sendBroadcast | Send not require P | Send require P | Send not require P | Send require P |
In Permission | require P | onReceive | onReceive | Permission Denial: broadcasting Intent | Permission Denial: broadcasting Intent |
In Permission | not require P | onReceive | onReceive | onReceive | onReceive |
No Permission | require P | onReceive | Permission Denial: receiving Intent | Permission Denial: broadcasting Intent | Permission Denial: broadcasting Intent Permission Denial: receiving Intent |
No Permission | not require P | onReceive | Permission Denial: receiving Intent | onReceive | Permission Denial: receiving Intent |
!. receiver 的 android:permission 属性,表示该receiver只接受具有相应权限的Package的Broadcast消息
<receiver android:name=".custom.permission.DeclaredPermissionBroadcastReceiver"
android:permission="com.hyman.demo.android.broadcast.permission.PERMISSION_PERMISSION"
>
<intent-filter>
<action android:name="com.hyman.demo.android.broadcast.permission.PERMISSION_ACTION"></action>
</intent-filter>
</receiver>
2. registerReceiver(receiver, intentFilter, PERMISSION, null); 表示该receiver只接受具有相应权限的Package的Broadcast消息
3. sendBroadcast(intent, PERMISSION);表示只有具有相应权限的Package才能接受其所发送的Broadcast消息。
4. ※注意双声明权限 此处与activity声明权限不同 。Package要求某自定义权限时,需要同时使用<permission> Tag 和 <uses-permission> Tag
<permission
android:name="com.hyman.demo.android.broadcast.permission.PERMISSION_PERMISSION" >
</permission>
<uses-permission android:name="com.hyman.demo.android.broadcast.permission.PERMISSION_PERMISSION"></uses-permission>