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

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

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

时间: 2025-01-29 20:22:21

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

java中使用Filter控制用户登录权限具体实例_java

学jsp这么长时间,做的项目也有七八个了,可所有的项目都是用户登录就直接跳转到其拥有权限的页面,或者显示可访问页面的链接.使用这种方式来幼稚地控制访问权限.从来没有想过如果我没有登录,直接输入地址也可以直接访问用户的页面的. 在jsp中权限的控制是通过Filter过滤器来实现的,所有的开发框架中都集成有Filter,如果不适用开发框架则有如下实现方法: LoginFilter.java 复制代码 代码如下: public class LoginFilter implements Filter {

17_Android中Broadcast详解(有序广播,无序广播)最终广播,Bundle传递参数,传递参数的时候指定权限

 1  Broadcast是Android中的四大组件之一,他的用途很大,比如系统的一些广播:电量低.开机.锁屏等一些操作都会发送一个广播. 2  广播被分为两种不同的类型:"普通广播(Normalbroadcasts)"和"有序广播(Ordered broadcasts)".普通广播是完全异步的,可以在同一时刻(逻辑上)被所有广播接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播:然后有序广

android 中添加了读写文件的权限,却报(Permission denied)错误

问题描述 android 中添加了读写文件的权限,却报(Permission denied)错误 android 中添加了读写文件的权限,却报open failed: EACCES (Permission denied) 太坑人了! 添加了权限 //代码部分: File file2 = new File(Environment.getExternalStorageDirectory(),"file2.txt"); file2.setWritable(true); file2.setRe

说说Android的广播(1) - 普通广播,有序广播和粘性广播

说说Android的广播 对于Activity的启动流程,我们已经有了几个版本的分析了.这里我们分析一个更容易一些的,四大组件中最简单的Broadcast Receiver. 关于Broadcast,有几点需要了解.首先是广播的类型,然后是广播的发送方法,最后是广播是如何被接收的.这三者相辅相承的,比如普通广播和有序广播只有在详细了解了广播的接收过程了之后,才能真正明白它的含义. 广播的类型:普通广播,有序广播和粘性广播 普通的广播是不在意顺序的,最简单的理解是同时可以收到这个广播.如果应用是动

Android开发之在程序中时时获取logcat日志信息的方法(附demo源码下载)_Android

本文实例讲述了Android开发之在程序中时时获取logcat日志信息的方法.分享给大家供大家参考,具体如下: 今天分享一个在软件开发中很实用的例子,也是这几天在通宵加班中我使用的一个小例子, 在程序中监听Log信息. 为什么说它实用?原因是Android的开发厂商各种修改之后手机和手机之间以后存在很多差异.比如说魅族M9手机 开发中如果项目中涉及到访问手机系统的地方,例如访问系统短信库,M9手机它会提示一个dialog框 让用户自己去选择 访问还是不访问.这样就给开发适配带来了巨大的麻烦.本来

android程序怎样控制手机中通知中心的开关?

问题描述 android程序怎样控制手机中通知中心的开关? 我要通过app设置里的推送开关来控制手机通知中心app是否接收通知,代码怎么写? 解决方案 这里的通知中心的管理应该是系统设置里面的吧?**_如果是,那就系统的行为,APP无法控制_**.比如某款APP产生了通知,你可以在这里禁止它弹出通知消息. 这里的只是权限的管理,系统允不允许你产生通知的控制中心而已.如果只是简单的要产生使用通知栏产生一条消息,你可以参考如下代码(该代码的功能是点击通知栏后跳转某个Activity,里面一些参数根据

android-Android 代码中怎么判断用户是否禁用权限

问题描述 Android 代码中怎么判断用户是否禁用权限 我要实现一个打电话功能,点击按钮跳到打电话界面,在跳转之前,怎么判断用户是否禁用了打电话的权限? 像小米这些手机权限管理中,是可以禁用的 解决方案 https://www.zhihu.com/question/34654772/answer/60199461 解决方案二: private boolean checkWriteExternalPermission() { String permission = "android.permis

Android中实现下载URL地址的网络资源的实例分享_Android

通过URL来获取网络资源并下载资源简单实例: package com.android.xiong.urltest; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.gra

android进度条在gridview中

问题描述 android进度条在gridview中 我的gridview种有个进度条和开始及结束两个按钮,我点击开始,我希望他可以一直按照我的赋值更新进度,当我按下结束按钮时他结束掉.这个怎么实现呢?求大师指点迷津! 解决方案 创建一个服务,这个服务可以读取你的赋值并广播进度,你的界面可以收听这个服务的广播并自己更新进度条.这是通用的做法. 解决方案二: thread + handler thread负责赋值的变化,然后发消息 handler负责更新进度条 通过btn的点击响应来控制thread