当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 中在有序广播中添加自定义权限的实例

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

2019年07月24日  | 移动技术网移动技术  | 我要评论

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(); 
  } 
} 

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网