Android 自定義廣播權限例子


自定義廣播權限例子:
發送者: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"));

  }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM