权限是一种安全机制,Android权限主要用于限制应用程序内部某些具有限制性特性的功能使用以及应用程序之间的组件访问。
Android安全机制中的一个重要特点是在默认情况下应用程序没有权限执行对其他应用程序、操作系统或用户有害的操作。这些操作包括读/写用户的隐私数据(例如联系方式或E-mail)、读/写其他应用程序的文件、访问网络、阻止设备休眠等。应用程序的进程是一个安全的Sandbox,它的资源不能被外界访问,也不能访问其他应用程序。为了在应用之间共享资源,必须显式地声明,而在声明自己提供的资源的同时,可以要求使用方具备相应的权限。应用程序在manifest中声明自己需要拥有的权限,在安装时向系统请求,安装程序通过用户的反馈和验证应用程序的作者予以确认。
在Android应用程序运行时,若使用的权限没有申请或将设置里的权限手动关闭,那么应用程序将直接崩溃。
一个新建的Android应用默认是没有权限的,这意味着它不能执行任何可能对用户体验有不利影响的操作或者访问设备数据。为了使用受保护的功能,必须在应用程序的Android-Manifest.xml文件中添加一个或多个<uses-permission>标签。
在AndroidManifest.xml文件的<manifest>标签内使用权限标签声明使用某一个权限,可输入权限标签,Android Studido会出现提示,主要权限标签有<permission>和<uses-per- mission>。
1.<uses-permission>——系统权限标签
如果Android应用程序需要访问系统一个受保护的操作,例如访问网络、写外部存储器、定位等官方定义的权限,则要在Android应用程序的配置文件AndroidManifest.xml中添加相应的<uses-permission>,否则应用程序在运行时会发生崩溃。
在Android Studio中添加权限,在AndroidManifest.xml文件中,选择<uses-permission>标签,Android Studio会出现提示,从权限列表中进行选择,如图9-1所示。
图9-1 <uses-permission>标签的权限列表
例如,若要访问网络,则增加如下代码。
使用蓝牙的权限代码如下。
<uses-permission android :name="android.permission.BLUETOOTH"/>
允许程序读取用户联系人数据的代码如下。
<uses-permission android:name="android.permission.READ CONTACTS"/>
允许程序读取短信息的代码如下。
允许程序从非系统拨号器里输入电话号码的代码如下。
<uses-permission android:name="android.permission.CALL_PHONE"/>
允许程序拨打电话并替换系统的拨号器界面的代码如下。
<uses-permission android:name="android.permission.CALL_PRIVILEGED"/>
允许访问摄像头进行拍照的代码如下。(www.xing528.com)
<uses-permission android:name="android.permission.CAMERA"/>
2.<permission>——自定义权限标签
应用程序能用permission保护自己的组件,可以使用Android系统定义的或者其他应用定义或者自身应用定义的permission。
自定义权限的使用分两步,第一步是权限定义,第二步应用程序权限声明。
(1)如果要定义一个新的permission,可以用<permission>节点来定义,格式如下。
其中的各项含义如下。
android:label:权限名字,向用户显示,值可以是一个string数据,例如这里的“自定义权限”。
android:description:比label更长的对权限的描述。值是在resource文件中获取的,不能直接写string值,例如这里的“@string/hello”。
android:name:权限名字,如果其他App引用该权限,需要填写这个名字。
android:protectionLevel:权限级别,分为如下4个级别。
normal:低风险权限,在安装的时候,系统会自动授予权限给application。
dangerous:高风险权限,系统不会自动授予权限给App,在用到的时候,会向用户提示。
signature:签名权限,在其他App引用声明的权限时,需要保证两个App的签名一致。这样系统会自动授予权限给第三方App,而不提示给用户。
signatureOrSystem:引用该权限的App需要有和系统同样的签名才能授予权限,一般不推荐使用。
android:permissionGroup:将本权限归为某个权限组。属性值是组的名称。
(2)在应用程序中使用前面定义的<permission>name属性声明。
<permission>和<uses-permission>两者之间不同之处如下
<uses-permission>是Android预定义的权限,<permission>是自己定义的权限,<permission>相对来说使用较少。
<uses-permission>是官方定义的权限,是调用其他应用时自己需要声明的权限,<permission>是自己定义的权限,别人调用这个程序时需要用<uses-permission>来声明。
在一般情况下,不需要为自己的应用程序声明某个权限,除非提供了供其他应用程序调用的代码或者数据,在这个时候才需要使用<permission>这个标签,很显然,这个标签可以让我们声明自己程序的权限。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。