语法(SYNTAX):

<uses-permissionandroid:name="string"/>

被包含于(CONTAINED IN):

<manifest>

说明(DESCRIPTION):

这个属性用于给应用程序授予正确的操作的所必须的权限。这些权限是在应用程序安装时被授予的,而不是在运行时授予的。

有关更多的权限信息,请看《AndroidManifest.xml文件详解(三)》文档中“权限”介绍(http://blog.csdn.net/fireofstar/article/details/7543067)和《Android的安全性和权限》(http://blog.csdn.net/fireofstar/article/details/7536803)。在android.Manifest.permission类中能够找到由基础平台定义的一个权限列表(http://developer.android.com/reference/android/Manifest.permission.html)。

属性(ATTRIBUTES):

android:name

这个属性用于定义权限的 名称。它能够是由该应用程序用<permission>元素定义的一个权限,也可以是由另外一个应用程序所定义的权限,还可以是有系统定义的 标准的权限,如:android:permission.CAMERA或android:permission.READ_CONTACTS等。就像例子 中所显示的那样,权限名通常要用包名做为前缀,以保证其唯一性。

被引入的版本(INTRODUCED IN):

API Level 1

应用程序自定义 <permission>

天哪,这篇文章终于说道如何自定义权限了,左盼右盼,其实这个自定义权限相当easy。为了方便叙述,我这边会用到两个app作为例子示范。

Permission App: used to define a new permission
这个作为定义权限的App,我称之为Permission App.
Client App: used to access the specified activity of Permission App
这个作为访问上述自定义权限的App,我称之为Client App

先看如何写Permission App

第一步

Permission App很简单,它的任务就是定一个Permission,使用< permission>标签即可,我们假设内容如下:

<permission

android:name="custom.permission.STARTACTIVITY"
android:description="@string/permission_dcr"
android:protectionLevel=signatureOrSystem
android:label="label">
</permission>

第二步

然后在定一个Activity,这个Activity很简单就是展示下一行字,如”Hello from Custiom Permission Activity!”这里就不详述。

第三步

最重要的地方:我们需要为这个Activity指明访问权限,权限即为我们刚申请的权限,这个需要同样需要在AndroidManifest.xml文件中标识,如下:

复制代码 代码如下:
<activity
        android:name="com.example.custompermission.MainActivity"
        android:label="@string/app_name"
        android:permission="custom.permission.STARTACTIVITY"> 
</activity>

这个Activity于是就被打上了必须使用” custom.permission.STARTACTIVITY”权限才能访问的印记。

接着写Client App

至于如何写Client App,那就so so so … easy了,只需两步:

第一步

在AndroidManifest.xml文件中首先申请权限,如下:

代码如下:
<uses-permission android:name="custom.permission.STARTACTIVITY"/>

第二步

访问Permission App表明需要该权限的Activity,代码如下:

Intent in = new Intent();

in.setClassName("com.example.custompermission", "com.example.custompermission.MainActivity"); 
startActivity(in);

大功告成

我们可以测试下效果,首先安装Permission App,然后接着安装Client App,结果如下:

点击之后

另外我曾经在Android Permission权限机制引子提到过Protection Level问题,这边我同样测试下这个Protection Level,下面结果中Y表示可以正常访问,N则表示不可以访问。

需要注意的是,使用自定义Permission的activity如果设置了

<activity
        android:name="com.example.custompermission.MainActivity"
        android:label="@string/app_name" android:permission="custom.permission.STARTACTIVITY"> 
<intent-filter> 
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter>

那就不能从Launcher中启动该App,因为只有你的Launcher必须使用了uses-permission去请求获取custom.permission.STARTACTIVITY权限,事实上你的Launcher是不具备已经请求自定义权限的。

Launcher会报:Application is not installed on your phone. 的错误.

AndroidManifest.xml文件详解(uses-permission)的更多相关文章

  1. AndroidManifest.xml文件详解(permission)

    http://blog.csdn.net/think_soft/article/details/7574726 语法(SYNTAX): <permissionandroid:descriptio ...

  2. [转]AndroidManifest.xml文件详解

    转自:http://www.cnblogs.com/greatverve/archive/2012/05/08/AndroidManifest-xml.html AndroidManifest.xml ...

  3. AndroidManifest.xml文件详解

    本文为安全专家李洋的最新一篇专栏文章<AndroidManifest.xml文件详解>.AndroidManifest.xml是一个跟安全相关的配置文件,该配置文件是Android安全保障 ...

  4. AndroidManifest.xml文件详解(meta-data)

    http://blog.csdn.net/think_soft/article/details/7567189 语法(SYNTAX): <meta-dataandroid:name=" ...

  5. AndroidManifest.xml文件详解(activity)(一)

    <activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetai ...

  6. 【Android 复习】:AndroidManifest.xml 文件详解

    <?xml version="1.0" encoding="utf-8"?> <!-- package 包表示整个Android应用程序的主要 ...

  7. AndroidManifest.xml文件详解(application)

    http://blog.csdn.net/think_soft/article/details/7557101 语法(SYNATX): <application android:allowTas ...

  8. AndroidManifest.xml文件详解(permission-group)

    http://blog.csdn.net/think_soft/article/details/7578760 语法(SYNTAX): <permission-groupandroid:desc ...

  9. AndroidManifest.xml文件详解(activity)(四)

    android:multiprocess 这个属性用于设置Activity的实例能否被加载到与启动它的那个组件所在的进程中,如果设置为true,则可以,否则不可以.默认值是false. 通常,一个新的 ...

随机推荐

  1. android极光推送初步了解

    推送可以及时,主动的与用户发起交互 (1)继承jar包,照示例AndroidManifest.xml添加. (2)自定义MyApp继承自Application,在onCreate方法中调用JPushI ...

  2. Mybatis 使用技巧总结

    9月 11, 2014 | Nix.Huang 目录: 1.区分 #{} 和 ${}的不同应用场景 2.spring环境用mybatis-spring 的接口而不是Mybatis的原生接口 3.返回M ...

  3. 【Foreign】Walk [暴力]

    Walk Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output Sample Input 3 1 2 3 1 3 9 Sa ...

  4. 【BZOJ1926】【SDOI2010】粟粟的书架 [主席树]

    粟粟的书架 Time Limit: 30 Sec  Memory Limit: 552 MB[Submit][Status][Discuss] Description 幸福幼儿园 B29 班的粟粟是一 ...

  5. C++ Vector 中自定义对象的排序

    需求: 客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如lv来进行排序. 数据存储: 每个联盟数据是一个对象,所有的联盟列表存在一个vector容器里面. 老的解决方法: 冒泡排序方法算法 新 ...

  6. HDU 1574 RP问题 (dp)

    题目链接 Problem Description 在人类社会中,任何个体都具有人品,人品有各种不同的形式,可以从一种形式转换为另一种形式,从一个个体传递给另一个个体,在转换和传递的过程中,人品不会消失 ...

  7. ASP.NET 设置DropDownList的当前选项

    1.通过显示字符Text DropDownList.Items.FindByText("你的值").Selected=true; 如果在设置之前,进行过设置,应用如下格式: Dro ...

  8. No 'Access-Control-Allow-Origin' Ajax跨域访问解决方案

    No 'Access-Control-Allow-Origin' header is present on the requested resource. 当使用ajax访问远程服务器时,请求失败,浏 ...

  9. 对vue中 默认的 config/index.js:配置的详细理解 -【以及webpack配置的理解】-config配置的目的都是为了服务webpack的配置,给不同的编译条件提供配置

    当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面  (环境变量及其基本变量的配置) var path = require('path') ...

  10. Pythone3 sys模块

    1.sys.argv 可以实现从程序外部向程序传递参数2.sys.exit() 程序中间退出,exit(0)正常退出,其他为异常退出3.sys.getdefaultencoding() 获取系统编码方 ...