android 广播自定义权限

一、广播接收者定义的权限

你的应用定义了一个广播接收者,你不希望谁都能在自己的应用里发送这个广播让你接收到,所以你打算定义一个权限来控制一下。

1.在 AndroidManifest.xml 文件里声明一个新的权限
<permission android:name="com.xxx.xxx.permission" />

2.在声明的广播上加上这个权限

        <receiver android:name=".broadcast.MyBroadcast"
            android:permission="com.xxx.xxx.permission">
            <intent-filter>
                <action android:name="com.xxx.mybroadcast.action" />
            </intent-filter>
        </receiver>

好了,这样就设置好了这个广播接收者的权限,别的应用想发送这个广播,就需要在他的应用的 AndroidManifest.xml 里添加权限来标识他想要使用这个权限。自己的应用里发送这个广播是不需要添加权限的。

3.三方应用添加发广播的权限
<uses-permission android:name="com.xxx.xxx.permission" />
好了,这样就可以发送 com.xxx.mybroadcast.action 对应的广播了,如果不加这个权限,就算发了这个广播,对应的广播接收者也是收不到的。

二、广播发送者定义的权限

你是发送广播的人,你希望谁都能在自己的应用里定义对应的 action 来接收你发的广播,所以你打算定义一个权限来控制一下。
1.在 AndroidManifest.xml 文件里声明一个新的权限
<permission android:name="com.xxx.xxx.permission.haha" />

2.发送广播时带上这个权限
sendBroadcast(new Intent("com.xxx.mybroadcast.action"), "com.xxx.xxx.permission.haha");

3.三方应用添加收广播的权限
<uses-permission android:name="com.xxx.xxx.permission.haha" />
好了,这样就可以接收到 com.xxx.mybroadcast.action对应的广播了,如果不加这个权限,就算发了这个广播,对应的广播接收者也是收不到的。

4.注意事项
你们有了一个新的业务需求,你们项目组的应用到时需要向公司另一个项目组 B 的应用发广播,你们已经开发好了,就剩下设置权限测试一下就发版本了,这时 B 组的兄弟告诉你,他们应用的这个广播接收者,到时权限会定义为 com.x.permission2,但是一时半会上不了线,你们先发版本吧,权限就写这个准没事儿,不要等我们了。
他的广播接收者设置好权限为 com.x.permission2,你直接写好这个权限先发版本,看着像是等他们的应用上线后,你们的应用就能正常发广播给他们了,实际上不行,这里有个先后顺序,需要让定义权限的应用先安装,发送广播的应用后安装,流程才能正常。

如果你想同时定义收发两种权限,这样会发生什么?
假设应用 A 发送广播,应用 B 接收广播,先让接收者 B 定义(permission)一个权限,那么 A 想发这个广播就得在清单文件声明要使用这个权限(uses-permission),这时需要先安装应用 B,后安装应用 A 才行;(接收者:你想发这个广播让我收到,你要声明使用我定义的这个权限,不然我不收)
如果广播发送者同时也想定义一个权限,那么得让发送者 A 定义(permission)一个权限,B 想接收广播就得在清单文件声明要使用这个权限(uses-permission),这时需要先安装应用 A,后安装应用 B 才行。(发送者:你想收到我发的这个广播,你要声明使用我定义的这个权限,不然你收不到)
情况1:先安装 B,后安装 A,接收者定义的权限正常生效,A 发送不带权限的广播,B 能收到,但是发送带权限的就收不到,因为发送者 A 定义的权限后安装;
情况2:先安装 A,后安装 B,发送者定义的权限正常生效,但是无论发送的广播带不带权限,B 都收不到,因为接收者 B
定义的权限后安装,发送者 A 根本就没有效声明过想使用这个权限,就算你发不带权限的广播,人家都不收你的,你还发个带权限的广播,想 peach…

谁定义权限,谁先安装。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在安卓开发中,可以通过广播申请自定义权限。以下是一些基本步骤: 1. 在AndroidManifest.xml文件中添加自定义权限声明: ``` <permission android:name="com.example.custompermission" android:protectionLevel="signature"/> ``` 其中,android:name是自定义权限的名称,android:protectionLevel指定了权限保护级别。 2. 在BroadcastReceiver中发送自定义广播,并附带自定义权限: ``` Intent intent = new Intent("com.example.ACTION_CUSTOM_BROADCAST"); intent.putExtra("message", "Hello, world!"); intent.addPermission("com.example.custompermission"); sendBroadcast(intent); ``` 其中,"com.example.ACTION_CUSTOM_BROADCAST"是自定义广播的名称,"com.example.custompermission"是自定义权限的名称。 3. 在需要使用自定义权限的地方,检查是否拥有该权限: ``` if (ContextCompat.checkSelfPermission(this, "com.example.custompermission") == PackageManager.PERMISSION_GRANTED) { // 执行需要权限的操作 } else { // 申请权限 ActivityCompat.requestPermissions(this, new String[]{"com.example.custompermission"}, 1); } ``` 其中,"this"是当前上下文,"com.example.custompermission"是自定义权限的名称,1是申请权限时的请求码。 4. 在权限申请结果回调中处理申请结果: ``` @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == 1) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 执行需要权限的操作 } else { // 权限申请被拒绝 } } } ``` 其中,1是申请权限时的请求码,PackageManager.PERMISSION_GRANTED表示权限已授权,PackageManager.PERMISSION_DENIED表示权限被拒绝。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值