Chinaunix首页 | 论坛 | 博客
  • 博客访问: 389009
  • 博文数量: 120
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 741
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-27 18:15
文章分类

全部博文(120)

文章存档

2016年(13)

2015年(41)

2014年(66)

我的朋友

分类: Android平台

2014-10-15 16:08:54

    在分析launcher2的源代码时,在AndroidManifest.xml中发现permission和uses-permission两种不同的使用方式,结合网上搜索的内容和自己的理解,简单的阐述一下自己的观点,不吝赐教:
    先看AndroidManifest.xml的部分源码:

点击(此处)折叠或打开

  1.     <permission
  2.         android:name="com.android.launcher.permission.PRELOAD_WORKSPACE"
  3.         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
  4.         android:protectionLevel="system|signature" />
  5.     <permission
  6.         android:name="com.android.launcher.permission.INSTALL_SHORTCUT"
  7.         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
  8.         android:protectionLevel="dangerous"
  9.         android:label="@string/permlab_install_shortcut"
  10.         android:description="@string/permdesc_install_shortcut" />
  11.     <permission
  12.         android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"
  13.         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
  14.         android:protectionLevel="dangerous"
  15.         android:label="@string/permlab_uninstall_shortcut"
  16.         android:description="@string/permdesc_uninstall_shortcut"/>
  17.     <permission
  18.         android:name="com.android.launcher.permission.READ_SETTINGS"
  19.         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
  20.         android:protectionLevel="normal"
  21.         android:label="@string/permlab_read_settings"
  22.         android:description="@string/permdesc_read_settings"/>
  23.     <permission
  24.         android:name="com.android.launcher.permission.WRITE_SETTINGS"
  25.         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
  26.         android:protectionLevel="normal"
  27.         android:label="@string/permlab_write_settings"
  28.         android:description="@string/permdesc_write_settings"/>

  29.     <uses-permission android:name="android.permission.CALL_PHONE" />
  30.     <uses-permission android:name="android.permission.SET_WALLPAPER" />
  31.     <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
  32.     <uses-permission android:name="android.permission.VIBRATE" />
  33.     <uses-permission android:name="android.permission.BIND_APPWIDGET" />
  34.     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  35.     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
  36.     <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
  37.     <uses-permission android:name="android.permission.GET_TASKS"/>
  38.     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    从上面的代码可以看出,uses-permission使用了系统声明的权限(android.permission.CALL_PHONE...),也使用了上面自定义的权限(com.android.launcher.permission.READ_SETTING...)。
    uses-permission:表明了App需要的权限。大家都知道,安装App时会弹出一个“是否要安装该应用程序”的提示信息,这个界面里面描述了该App需要访问的系统资源,如果你点击了"安装"按钮,说明你主动授权了该App可以使用这些系统资源,否则你就点"取消"按钮;也就是说,只有App获得了这些它需要的访问权限,该App才能运行。
    所以App所需要的权限是在用户安装应用的时候授予的。对于uses-permission来说,android:name的值可以是其他app声明的;也可以是自己自定义声明的;也可以是系统的权限名称,例如android.permission.CAMERA or android.permission.READ_CONTACTS等等。
(注:在Android Market中,出于App安全性的考虑,可能会对uses-permission进行过滤。)
    permission:App自身自定义的权限声明,可以用来限制App中(特殊组件、特性)与(App内部或者和其他App)之间的访问。用法如下:

点击(此处)折叠或打开

  1. <permission android:description="string resource"
  2.             android:icon="drawable resource"
  3.             android:label="string resource"
  4.             android:name="string"
  5.             android:permissionGroup="string"
  6.             android:protectionLevel=["normal" | "dangerous" |
  7.                                 "signature" | "signatureOrSystem"] />
android:label:权限名字,显示给用户的,可以是一个string,也可以通过resource文件来获取。
android:description:比label更长的对权限的描述。值是通过resource文件中获取的,不能直接写string值。
android:name:权限名字,如果其他app引用该权限需要填写这个名字。
android:protectionLevel:权限级别,分为4个级别:
    normal:低风险权限,在安装的时候,系统会自动授予权限给application。
    dangerous:高风险权限,系统不会自动授予权限给app,在用到的时候,会给用户提示。
    signature:签名权限,在其他app引用声明的权限时,需要保证两个app的签名一致。这样系统就会自动授予权限给第三方app,而不提示给用户。
    signatureOrSystem:这个权限是引用该权限的app需要有和系统同样的签名才能授予的权限,一般不推荐使用。

下面是自己做的例子:
引用的字符串的值:

1、uses-permission只需要访问联系人的权限

安装apk时,出现的界面如下:

2、uses-permission需要访问联系人的全新,同时需要自定义的权限

安装apk时,出现如下界面:

同时可以看出,自定义的权限声明默认是被隐藏起来的,需要展开才能看见,从内容来看,正是string值的汉语意思。
阅读(761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~