自定義廣播權限例子:
發送者:Demo_BroadcastSend 發出廣播(1、發出無權限廣播按鈕 , 2、發出帶權限廣播按鈕)
接收者:Demo_BroadcastReceive_A 無自定義廣播權限
接收者:Demo_BroadcastReceive_B 有自定義廣播權限(manifest中)
<uses-permission android:name="com.sdf.userdefined.receiver.permission" />
<permission
android:name="com.sdf.userdefined.receiver.permission"
android:protectionLevel="normal" />
--------------------------------------------------------------------------------
Demo_BroadcastSend發出無權限廣播,Demo_BroadcastReceive_A與Demo_BroadcastReceive_B中的廣播接收器均可接收到改廣播
結果:
[MyReceiver--->B] onReceive : intent = Intent { act=com.sdf.userdefined.receiver.action cat=[receiver] flg=0x10 cmp=com.sdf.demo_broadcastreceive_b/.MyReceiverB (has extras) }
[MyReceiver--->B] onReceive : message = 無 ---> 權限的廣播
[MyReceiver--->A] onReceive : intent = Intent { act=com.sdf.userdefined.receiver.action cat=[receiver] flg=0x10 cmp=com.sdf.demo_broadcastreceive_a/.MyReceiverA (has extras) }
[MyReceiver--->A] onReceive : message = 無 ---> 權限的廣播
--------------------------------------------------------------------------------
步驟1:
Demo_BroadcastSend 中(manifest)定義以下權限:
<uses-permission android:name="com.sdf.userdefined.send.permission" />
<permission
android:name="com.sdf.userdefined.send.permission"
android:protectionLevel="normal" />
步驟2:
Demo_BroadcastReceive_B 中(manifest)定義以下權限:
<uses-permission android:name="com.sdf.userdefined.receiver.permission" />
<permission
android:name="com.sdf.userdefined.receiver.permission"
android:protectionLevel="normal" />
且
Demo_BroadcastReceive_B 中 ( manifest)的廣播接收器加上權限屬性:
android:permission="com.sdf.userdefined.send.permission"
以上兩步驟同時實現才可接收帶權限的廣播
結果:
[MyReceiver--->B] onReceive : intent = Intent { act=com.sdf.userdefined.receiver.action cat=[receiver] flg=0x10 cmp=com.sdf.demo_broadcastreceive_b/.MyReceiverB (has extras) }
[MyReceiver--->B] onReceive : message = 帶 ---> 權限的廣播
--------------------------------------------------------------------------------
廣播發送者:Demo_BroadcastSend
Manifest.xml
<!-- 自定義權限 -->
<uses-permission android:name="com.sdf.userdefined.send.permission" />
<!-- 在聲明權限時需要一個android:protectionLevel的屬性,它代表“風險級別”:normal、dangerous、signature、signatureOrSystem -->
<permission
android:name="com.sdf.userdefined.send.permission"
android:protectionLevel="normal" />
Code :
發出無權限廣播:
/**
* Demo_BroadcastReceive_A 與 Demo_BroadcastReceive_B
* 中均過濾接收該廣播,因為intent的action一樣
*/
Intent i = new Intent("com.sdf.userdefined.receiver.action");
i.addCategory("receiver");
i.putExtra("message", "無 ---> 權限的廣播");
/**
* 不帶權限,即只要有過濾com.sdf.userdefined.receiver.action即可接收該廣播,即
* Demo_BroadcastReceive_A 與 Demo_BroadcastReceive_B 均可收到
*/
sendOrderedBroadcast(i, null);
發出帶權限廣播:
/**
* Demo_BroadcastReceive_A 與 Demo_BroadcastReceive_B
* 中均過濾接收該廣播,因為intent的action一樣
*/
Intent ii = new Intent("com.sdf.userdefined.receiver.action");
ii.addCategory("receiver");
ii.putExtra("message", "帶 ---> 權限的廣播");
/**
* com.sdf.userdefined.receiver.permission :
* 該permission在接收程序中的manifest中定義,即這邊帶權限的廣播發出去,誰的應用中定義了該權限,誰才能接收到,
* 即只有Demo_BroadcastReceive_B 可收到
*/
sendOrderedBroadcast(ii, "com.sdf.userdefined.receiver.permission");
接收者A:Demo_BroadcastReceive_A
Manifest.xml
<!-- 帶權限廣播接收器 ,無自定義權限時,android:permission該屬性可以去掉 -->
<receiver
android:name="com.sdf.demo_broadcastreceive_a.MyReceiverA"
android:permission="com.sdf.userdefined.send.permission" >
<intent-filter>
<action android:name="com.sdf.userdefined.receiver.action" />
<category android:name="receiver" />
</intent-filter>
</receiver>
Code:
package com.sdf.demo_broadcastreceive_a;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* 廣播接收器
*
* @author dengfu.su
*
*/
public class MyReceiverA extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("sdf", "[MyReceiver--->A] onReceive : intent = " + intent.toString());
Log.d("sdf", "[MyReceiver--->A] onReceive : message = " + intent.getStringExtra("message"));
}
}
接收者A:Demo_BroadcastReceive_B
Manifest.xml:
<!--
以下權限為自定義廣播權限,當該權限被定義時,Demo_BroadcastSend中發出帶該權限的廣播,
本應用的廣播接收器即可接收到該廣播 ,而Demo_BroadcastReceive_A 接收不到
-->
<uses-permission android:name="com.sdf.userdefined.receiver.permission" />
<permission
android:name="com.sdf.userdefined.receiver.permission"
android:protectionLevel="normal" />
<!-- 帶權限廣播接收器 -->
<receiver
android:name="com.sdf.demo_broadcastreceive_b.MyReceiverB"
android:permission="com.sdf.userdefined.send.permission" >
<intent-filter>
<action android:name="com.sdf.userdefined.receiver.action" />
<category android:name="receiver" />
</intent-filter>
</receiver>
Code:
package com.sdf.demo_broadcastreceive_b;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* 帶權限的廣播接收器
*
* @author dengfu.su
*
*/
public class MyReceiverB extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("sdf", "[MyReceiver--->B] onReceive : intent = " + intent.toString());
Log.d("sdf", "[MyReceiver--->B] onReceive : message = " + intent.getStringExtra("message"));
}
}