Android 运行时权限

Android 的权限机制,从系统的第一个版本开始就已经存在了。但其实之前 Android 的权限机制在保护用户安全和隐私等方面起到的作用比较有限,尤其是一些大家都离不开的常用软件,非常容易“店大欺客”。为此,Android 开发团队在Android 6.0 系统中引入了运行时权限这个功能

权限机制

们在AndroidManifest.xml 文件中 添加了权限声明:

1
<uses-permission android:name="android.permission.CALL_PHONE" />

加入了这句权限声明后,用户主要在两个方面得到了保护。

一方面,如果用户在低于Android 6.0 系统的设备上安装该程序,会在安装界面给出提醒。这样用户就可以清楚地知晓该程序一共申请了哪些权限,从而决定是否要安装这个程序。

另一方面,用户可以随时在应用程序管理界面查看任意一个程序的权限申请情况。

这种权限机制的设计思路其实非常简单,就是用户如果认可你所申请的权限,就会安装你的程序,如果不认可你所申请的权限,那么拒绝安装就可以了。 但是理想是美好的,现实却很残酷。很多我们离不开的常用软件普遍存在着滥用权限的情况,不管到底用不用得到,反正先把权限申请了再说。

Android 开发团队当然也意识到了这个问题,于是在Android 6.0 系统中加入了运行时权限功能。也就是说,用户不需要在安装软件的时候一次性授权所有申请的权限,而是可以在软件的 使用过程中再对某一项权限申请进行授权。

当然,并不是所有权限都需要在运行时申请,对于用户来说,不停地授权也很烦琐。Android 现 在将常用的权限大致归成了两类,一类是普通权限,一类是危险权限。准确地讲,其实还有一些特殊权限,不过这些权限使用得相对较少。普通权限指的是那些不会直接威胁到用户的安全和隐私的权限,对于这部分权限申请,系统会自动帮我们进行授权,不需要用户手动操作。危险权限则表示那些可能会触及用户隐私或者对设备安全性造成影响的权限,如获取设备联系人信 息、定位设备的地理位置等,对于这部分权限申请,必须由用户手动授权才可以,否则程序就 无法使用相应的功能。

到Android 10 系统为止所有的危险权限

 注意,表格中每个危险权限都属于一个权限组,我们在进行运行时权限处理时使用的是权限名。原则上,用户一旦同意了某个权限申请之后,同组的其他权限也会被系统自动授权。但是请谨记,不要基于此规则来实现任何功能逻辑,因为Android 系统随时有可能调整权限的分组。

在程序运行时申请权限

CALL_PHONE这个权限是编写拨打电话功能的时候需要声明的,因为拨打电话会涉及用户手机的资费问题,因而被列为了危险权限。

修改activity_main.xml 布局文件:

1
2
3
4
5
6
7
8
9
10
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <Button
        android:id="@+id/makeCall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Make Call" />
</LinearLayout>

接着修改 MainActivity 中的代码:

接下来修改AndroidManifest.xml 文件,在其中声明如下权限:

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
 
    <uses-permission android:name="android.permission.CALL_PHONE" />

  

 

posted @   草木物语  阅读(265)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2022-01-18 深度优先搜索
2022-01-18 广度优先搜索
2022-01-18 离散数学中的图
2022-01-18 线性查找
2022-01-18
2022-01-18 哈希表
点击右上角即可分享
微信分享提示