Android权限级别android.content.pm.PermissionInfo#protectionLevel

android.content.pm.PermissionInfo#protectionLevel是表示权限级别的字段。下面这三个常量都是用来赋值给它的:

/**
 * A normal application value for {@link #protectionLevel}, corresponding
 * to the <code>normal</code> value of
 * {@link android.R.attr#protectionLevel}.
 */
public static final int PROTECTION_NORMAL = 0;

/**
 * Dangerous value for {@link #protectionLevel}, corresponding
 * to the <code>dangerous</code> value of
 * {@link android.R.attr#protectionLevel}.
 */
public static final int PROTECTION_DANGEROUS = 1;

/**
 * System-level value for {@link #protectionLevel}, corresponding
 * to the <code>signature</code> value of
 * {@link android.R.attr#protectionLevel}.
 */
public static final int PROTECTION_SIGNATURE = 2;

什么时候会用到PermissionInfo这个类呢?
接下来这段代码会打印出当前应用所请求的权限:

try {
    PackageManager packageManager = getPackageManager();
    PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS);
    for (PermissionInfo p : packageInfo.permissions)
        Log.d(TAG, p.toString());
} catch (PackageManager.NameNotFoundException e) {
    throw new AssertionError(e);
}

注意,这里的权限不是我们最常用的AndroidManifest.xml文件里面<uses-permission/>标签,而是<permission/>标签:

<permission android:name="com.example.carol.playground.RESTART" />
<permission android:name="com.example.carol.playground..SHOPPING" />

简单点讲,<permission/>标签是用来自定义权限的。所以android:name的内容可以随便填。
顺便说一下,<uses-permission/>标签的内容保存在PackageInfo的requestedPermissions字段里。

<permission/>标签

我们先看一下<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"] />

android:protectionLevel对应的就是android.content.pm.PermissionInfo#protectionLevel。

每种权限均有一个唯一的标签标识。标签通常指示受限制的操作。以下是 Android 定义的一些权限:

android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER

如果应用需要访问受权限保护的功能,则必须在清单中使用<uses-permission>元素声明应用需要该权限。将应用安装到设备上之后,安装程序会通过检查签署应用证书的颁发机构并(在某些情况下)询问用户,确定是否授予请求的权限。如果授予权限,则应用能够使用受保护的功能。否则,其访问这些功能的尝试将会失败,并且不会向用户发送任何通知。
应用也可以使用权限保护自己的组件。它可以采用由 Android 定义(如android.Manifest.permission中所列)或由其他应用声明的任何权限。它也可以定义自己的权限。新权限用 <permission>元素来声明。例如,Activity 可受到如下保护:

<manifest . . . >
    <permission android:name="com.example.project.DEBIT_ACCT" . . . />
    <uses-permission android:name="com.example.project.DEBIT_ACCT" />
    . . .
    <application . . .>
        <activity android:name="com.example.project.FreneticActivity"
                  android:permission="com.example.project.DEBIT_ACCT"
                  . . . >
            . . .
        </activity>
    </application>
</manifest>

请注意,在此示例中,DEBIT_ACCT权限不仅是通过<permission>元素来声明,而且其使用也是通过 <uses-permission>元素来请求。要让应用的其他组件也能够启动受保护的 Activity,您必须请求其使用权限,即便保护是由应用本身施加的亦如此。
同样还是在此示例中,如果将permission属性设置为在其他位置(例如android.permission.CALL_EMERGENCY_NUMBERS) 声明的权限,则无需使用 <permission> 元素再次声明。但是,仍有必要通过 <uses-permission>请求其使用权限。
<permission-tree>元素声明为代码中定义的一组权限声明命名空间,<permission-group>为一组权限定义标签,包括在清单中使用 <permission>元素声明的权限以及在其他位置声明的权限。这只影响如何对提供给用户的权限进行分组。<permission-group>元素并不指定属于该组的权限,而只是为组提供名称。可通过向 <permission>元素的permissionGroup属性分配组名,将权限放入组中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容