• Android学习笔记——自定义permission


    最近在配置BroadcastReceiver的时候,发现一条警告,如下图:

     

    百度了一下,网上的答案基本都是说把receiver标签的exported属性改为false。这样做确实是可以去掉警告,但是会引起的一个问题就是这个广播不能被其他应用程序所使用。官方文档是这样写的:

    Flag indicating whether the given application component is available to other applications.

    虽然说这只是一个警告,但本人的强迫症作祟,看着实在难受~~~于是果断查看帮助文档。终于,还是找到了问题的根本原因。

    http://developer.android.com/guide/topics/security/permissions.html

    警告的原因大概是说,如果没有给Broadreceiver或ContentProvider加上权限的话,那么其它任何程序都是可以无障碍地访问这些组件的。所以最好的解决方法就是加上一个我们自己定义的权限。官方如是说:

    To enforce your own permissions, you must first declare them in your AndroidManifest.xml using one or more <permission> tags.

     

    然后在我们的receiver中添加相应的权限就行:

     

    很好,世界清静了!

    如果想让其它程序可以调用这个接收器,那么,那个程序就要引用这个权限了。

     

    两个程序都安装之后,我们可以去看看那个调用广播的程序的权限:

     

    嗯,这个就是我们自己的权限!

    同样的道理,ContentProvider的配置也是类似的,不过ContentProvider可以将读和写两个权限分开配置,更加的细粒度。

    还有另外一个地方也是别人容易忽略的,就是有时候我们要发送的广播的动作有多个应用是一样的,比如有两个广播接收器的action都是“android.intent.action.EDIT”,那我们发送一个为该动作的广播就会调用多个广播接收器。

    这时候我们也可以使用自己定义的权限来解决。然后使用

     

    这个方法来发送广播,这样即使动作相同,也只有拥有权限的接收器可以收到。

  • 相关阅读:
    类变量、绑定方法、静态方法和类方法
    面向对象练习及补充
    2、error:file /usr/bin/ ** mysql-client-5.6.39-1.el7.x86_64
    15、Linux 磁盘映射DM
    14、echo “$JAVA_HOME/bin” >>/etc/profile 转义
    typora文件导出word
    1、Rocketmq centos7下安装及使用
    13、hostname及hostnamectl区别
    1、MySql集群
    Hadoop安装
  • 原文地址:https://www.cnblogs.com/yjiyjige/p/3135085.html
Copyright © 2020-2023  润新知