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

作者:lqh 时间:2021-08-10 05:09:35 

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

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

来源:http://blog.csdn.net/yalishadaa/article/details/52312876

标签:Android,有序广播
0
投稿

猜你喜欢

  • java中Struts2文件上传问题详解

    2023-12-16 10:27:54
  • Flutter 给列表增加下拉刷新和上滑加载更多功能

    2021-10-01 13:30:18
  • springboot跨域CORS处理代码解析

    2022-07-29 21:12:20
  • 使用JDBC实现数据访问对象层(DAO)代码示例

    2021-11-12 23:33:46
  • android端微信支付V3版本地签名统一下单详解

    2023-05-18 02:37:44
  • java Iterator.remove()实例方法分析

    2022-05-01 15:56:01
  • 说说@ModelAttribute在父类和子类中的执行顺序

    2022-07-31 17:59:55
  • idea中MavenWeb项目不能创建Servlet的解决方案

    2022-07-09 19:26:11
  • C#根据反射和特性实现ORM映射实例分析

    2023-03-29 11:52:52
  • Java Fluent Mybatis实战之构建项目与代码生成篇下

    2023-11-24 10:59:52
  • 如何实现自定义SpringBoot的Starter组件

    2023-06-28 14:49:04
  • springboot用controller跳转html页面的实现

    2022-08-15 06:57:51
  • 源码阅读之storm操作zookeeper-cluster.clj

    2022-06-01 13:21:48
  • C#/VB.NET 实现彩色PDF转为灰度PDF

    2021-07-23 08:23:49
  • 关于Spring BeanPostProcessor的执行顺序

    2022-03-17 23:53:41
  • Android自定义加载圈的方法

    2023-07-16 14:38:46
  • springboot集成开发实现商场秒杀功能

    2022-06-23 11:05:27
  • Java中对List集合的常用操作详解

    2023-05-02 23:52:47
  • SpringCloud如何搭建一个多模块项目

    2022-10-22 13:33:39
  • android利用消息机制获取网络图片

    2023-07-24 09:46:57
  • asp之家 软件编程 m.aspxhome.com