转载自:http://blog.csdn.net/szu_tanglanting/article/details/43194169
在安装的时候出现失败:
<uses-permission android:name="com.ut.permission.DEVICE_STATE"></uses-permission>这个权限应该是用而不是声明<permissionandroid:name="com.ut.permission.DEVICE_STATE"></ permission>
声明权限只能有一个app声明,如果有多个app声明一个权限,那它必须是签名也一样的。这样做的好处:保证世界范围内以签名为单位的声明permission只有一份,如果别的公司要用那只能以引用的形式(uses-permission)来获取权限,而不能再继续对这个权限进行声明了。(这里说的不同公司代表签名不同)
这样很好的限制了开发人员随便声明permission
Permission的声明里面有权限安全属性的。
<permission
android:description="stringresource"
android:icon="drawableresource"
android:label="stringresource"
android:name="string"
android:permissionGroup="string"
android:protectionLevel=["normal" | "dangerous" |
"signature" | "signatureOrSystem"] />
android:description: 描述这个权限所针对的操作及用户授予这个权限的后果
android:label: 权限的一个简短描述
android:name: 权限的唯一标识,一般都是使用 报名加权限名
android:permissionGroup: 权限所属权限组的名称
android:protectionLevel:权限的等级
normal:
是最低的等级,声明次权限的app,系统会默认授予次权限,不会提示用户
dangerous:
权限对应的操作有安全风险,系统在安装声明此类权限的app时会提示用户
signature:
权限表明的操作只针对使用同一个证书签名的app开放
signatureOrSystem:
与signature类似,只是增加了rom中自带的app的声明
这由于权限可以通过定义来进行设置,所以不能随便声明,要用的时候只是user-permission
自个写的demo进行认证了这个结论:
1:我写了2个Demo
Demo1的AndroidManifest.xml中声明了
<permission android:protectionLevel="normal"android:name="com.tutor.permission.VIEW">
</permission>
<activity android:name=".ViewActivity"
android:label="自定义action与permission"
android:permission="com.tutor.permission.VIEW"
>
<intent-filter>
<action android:name="android.tutor.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Demo2的AndroidManifest.xml中引用:
<uses-permissionandroid:name="com.tutor.permission.VIEW"></uses-permission>
这个形式在android4.4 和android5.0中多没问题。
如果在Demo2的AndroidManifest.xml中引用:
<permission android:protectionLevel="normal" android:name="com.tutor.permission.VIEW">
</permission>
<uses-permissionandroid:name="com.tutor.permission.VIEW"></uses-permission>
这么写就有问题了,多了声明;
这个在android4.4还是没问题的
但是在在android5.0就提示安装不上了:
这个现象和我们在androidL上遇到应用安装不上是同样的问题,所以我们应该叫第三方把应用不是自己声明的应用删除掉,只应用就行了(即用user-permission的方式)