欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 中在有序广播中添加自定义权限的实例

程序员文章站 2023-01-26 23:29:31
android 中在有序广播中添加自定义权限的实例 前言; 有序广播说明: 有序广播因为要处理消息的处理结果,所以要复杂一些。 * sendorderedbr...

android 中在有序广播中添加自定义权限的实例

前言;

有序广播说明:

有序广播因为要处理消息的处理结果,所以要复杂一些。

* sendorderedbroadcast(intent intent, string receiverpermission, broadcastreceiver resultreceiver, handler scheduler, int initialcode, string initialdata, bundle initialextras);

如果只是想让广播可以按优先级来收取,并不在意处理的结果,可以用下面的版本:

* sendorderedbroadcast(intent intent, string receiverpermission);

同样,在多用户环境下,也可以选择给哪个用户发广播:

* sendorderedbroadcastasuser(intent intent, userhandle user, string receiverpermission, broadcastreceiver resultreceiver, handler scheduler, int initialcode, string initialdata, bundle initialextras);

首先我们要在androidmanifest.xml中自定义一个权限,格式参考系统自带的权限,android.permission.xxxxx,只要是xxx.peimission.xxxxxx就行,如果不按照这个格式,那么这个权限可能没法使用。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  package="com.example.lsj.broadcasttest"> 
  <span style="color:#ff0000;"> <permission 
    android:name="test.permission.test" 
    android:protectionlevel="normal" 
    ></permission></span> 
  <application 
    android:allowbackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    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=".myreceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter android:priority="20"> 
        <action android:name="hahaha" /> 
      </intent-filter> 
    </receiver> 
    <receiver 
      android:name=".myreceiver2" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter android:priority="19"> 
        <action android:name="hahaha" /> 
      </intent-filter> 
 
    </receiver> 
  </application> 
 
  <span style="color:#ff0000;"> <uses-permission android:name="test.permission.test"/></span> 
</manifest> 

然后使用sendorderedbroadcast(intent,"test.permission.test");就可以发送有序广播了,当然发送广播之前还要指定一下接受者的优先级,优先级越高,android:priority指定的数字就越大。取值的范围是:-1000~1000这个就不详细叙述了。

public class mainactivity extends appcompatactivity { 
 
  @override 
  protected void oncreate(bundle savedinstancestate) { 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.activity_main); 
    button send= (button) findviewbyid(r.id.send); 
    send.setonclicklistener(new view.onclicklistener() { 
      @override 
      public void onclick(view v) { 
        intent intent=new intent(); 
        intent.setaction("hahaha"); 
 
        intent.putextra("msg","一个简单的消息"); 
        sendorderedbroadcast(intent,"test.permission.test"); 
      } 
    }); 
  } 
} 

第一个broadcastreceiver在接收到广播的时候,如果想要添加一些自己的东西进去,可以先创建一个bundle对象,并且存入数据。
然后通过setresultextras(bundle),把这个bundle添加到原来的消息中,

ublic class myreceiver extends broadcastreceiver { 
  public myreceiver() { 
  } 
 
  @override 
  public void onreceive(context context, intent intent) { 
    toast.maketext(context,"接收到的intent的action为:"+intent.getaction()+"\n消息内容是:"+intent.getstringextra("msg"),toast.length_long).show(); 
    bundle bundle=new bundle(); 
    bundle.putstring("first","第一个broadcast存入的消息!"); 
    setresultextras(bundle); 
 
  } 
} 

下一个broadcastreceiver通过getresultextras可以将信息提取出来。

ublic class myreceiver2 extends broadcastreceiver { 
  public myreceiver2() { 
  } 
 
  @override 
  public void onreceive(context context, intent intent) { 
    // todo: this method is called when the broadcastreceiver is receiving 
    bundle bundle=getresultextras(true); 
    string first=bundle.getstring("first"); 
    toast.maketext(context,"第一个broadcast存入的消息为:"+first,toast.length_long).show(); 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!