语法(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应用自动更新功能的代码实现(转)

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必 ...

  2. 插入排序Insertion sort 2

    原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个数字 分 ...

  3. 【BZOJ】2679: [Usaco2012 Open]Balanced Cow Subsets

    [算法]折半搜索+数学计数 [题意]给定n个数(n<=20),定义一种方案为选择若干个数,这些数可以分成两个和相等的集合(不同划分方式算一种),求方案数(数字不同即方案不同). [题解] 考虑直 ...

  4. Linux系统网络基础知识及配置

    一:DNS(domain name system)简介 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而 ...

  5. Linux内核模块编程可以使用的内核组件

    2.2.2 在阅读<深入Linux内核架构与底层原理> 作者:刘京洋 韩方,发现一些错误,有些自己的理解,特以此记录 1.工作队列(workqueue) 队列是一种可以先进先出的数据结构, ...

  6. Laravel 项目登录报错:The MAC is invalid.

    在 Laravel 项目完成部署到服务器.数据库导入成功后 后台登录报错: 原因是 Laravel 的 APP_KEY 和 encrypt() 函数加密的问题.(encrypt() 是 Laravel ...

  7. device tree property ---- interrupt-names

    device tree source 的 interrupt-names property 會對應到 pltform_get_irq_byname() 的第二個參數. .dtsi or .dts in ...

  8. 使用 ftrace 调试 Linux 内核【转】

    转自:http://blog.csdn.net/adaptiver/article/details/7930646 使用 ftrace 调试 Linux 内核,第 1 部分 http://blog.c ...

  9. centos rar 文件打开办法

    http://hi.baidu.com/nmxiaoxin/item/7642a139918a95677d034b6a Centos下解压rar.zip文件的方法 ============zip文件的 ...

  10. C语言调用Cmd命令以及执行系统软件

    C语言调用Cmd命令以及执行系统软件 http://blog.csdn.net/qq_16814591/article/details/43676377