6.0以下,在manifest.xml中申请,在应用安装时会被系统赋予权限;6.0上安装时系统不会赋予权限,只有在运行时动态申请。
注意 6.0指的是targetSdkVersion为23或23以上的应用
<permission>
自定义权限
<permission android:description="string resource"
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" |
"signature" | "signatureOrSystem"] />
- android:description:对权限的描述,比lable更加的详细,介绍该权限的相关使用情况,比如当用户被询问是否给其他应用该权限时。注意描述应该使用的是string资源,而不是直接使用string串。
- android:icon:用来标识该权限的一个图标。
- android:label:权限的一个给用户展示的简短描述。方便的来说,这个可以直接使用一个string字串来表示,但是如果要发布的话,还是应该使用string资源来表示。
- android:name:权限的唯一名字,由于独立性,一般都是使用包名加权限名,该属性是必须的,其他的可选,未写的系统会指定默认值。
- android:permissionGroup: 权限所属权限组的名称,并且需要在这个或其他应用中使用<permission-group>标签提前声明该名称,如果没有声明,该权限就不属于该组。
- android:protectionLevel:权限的等级
- normal
低风险权限,只要申请了就可以使用(在AndroidManifest.xml中添加<uses-permission>标签),安装时不需要用户确认; - dangerous
高风险权限,安装时需要用户的确认才可使用; - signature
只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它; - signatureOrSystem
签名相同,或者申请权限的应用为系统应用(在system image中),与 signature类似,只是增加了rom中自带的app的声明 ,尽量不要使用该选项,因为signature已经适合绝大部分的情况。
对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。
<uses-permission>
为了使当前应用可以顺利运行,需要申请系统访问权限。该权限申请后整个应用中的所有组件都有该权限的访问权。
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
android:name 权限名称,可以是系统提供的权限,也可以是使用其他应用使用<permission/>声明的权限(用于应用间访问)。
android:maxSdkVersion 该权限支持的最大版本号,超过该版本后就不需要该权限。
<uses-feature>
告诉外部应用,自身应用所依赖的硬件和软件功能。该属性不会影响应用的安装,只是对外提供额外的信息。方便外部应用按属性检索。
//该应用需要照相机
<uses-feature android:name="android.hardware.camera" />
权限检查
参考:
http://blog.csdn.net/self_study/article/details/50074781
http://blog.csdn.net/self_study/article/details/50186435