本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!

自定义权限,主要用于保护被赋予权限的组件。如无权限与有权限,正如public与private的对类保护的区别

执行运行时安全性检查 

Android中的运行时安全性检查是在进程级别和操作级别上进行的。在进程级别,Android禁止一个应用程序直接访问另一个应用程序的数据。实现方法是,每个应用程序都在不同的进程中运行,使用唯一且固定的ID。在操作级别上,Android定义了一组受保护的功能和资源。要使用应用程序能够访问此信息,必须向  AndroidManifest.xml 文件添加一个或多个权限请求。也可以为应用程序定义自定义权限。

进程边界上的安全性 

在桌面环境中,大部分应用程序都使用相同的用户ID 运行,与此不同的是,Android应用程序通常使用自己的唯一ID运行。通过使用不同的ID 运行每个应用程序,Android围绕每个进程创建了一种隔离边界。这能够阻止一个应用程序直接访问另一个应用程序。

尽管每个进程都具有边界,但应用程序之间的数据共享显然也可以实现,但必须显示地进行共享。换句话说,要获得另一个应用程序的数据,必须借助该应用程序的组件。例如,可以查询另一应用程序的ContentProvider, 可以调用另一个应用程序中的活动,或者可以与另一个应用程序的服务通信。所有这些途径都提供了在应用程序之间共享信息的方法,但它们显式方式实现此目的,因为你不会访问基础数据库、文件等内容。

下面我们来 使用自定义权限 

Android支持为应用程序定义自定义权限。例如,如果希望阻止某些用户启动应用程序中的某个活动(也就是某个Activity),可以定义自定义权限来实现,要使用自定义权限,首先在AndroidManifest.xml 文件中声明它们。定义了权限之后,可以将它们作为组件定义的一部分进行引用。

首先创建一个工程DefinePermission

修改MainActivity当前类,添加

	Toast.makeText(this, "欢迎来到步步高的世界!", Toast.LENGTH_LONG).show();
修改AndroidManifest.xml文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lzx.definepermission"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<permission
android:name="com.lzx.permission.test"
android:label="@string/app_name"
android:permissionGroup="@string/hello_world"
android:protectionLevel="normal" >
</permission>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:permission="com.lzx.permission.test" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
1、自定义权限

声明的含义如下;

android:label:权限名字,显示给用户的,值可是一个 string 数据,例如这里的“自定义权限”。

android:description:比 label 更长的对权限的描述。值是通过 resource 文件中获取的,不能直接写 string 值,例如这里的”@string/test”。

android:name:权限名字,如果其他 app 引用该权限需要填写这个名字。

android:protectionLevel:权限级别,分为 4 个级别:

    • normal:低风险权限,在安装的时候,系统会自动授予权限给 application。
    • dangerous:高风险权限,系统不会自动授予权限给 app,在用到的时候,会给用户提示。
    • signature:签名权限,在其他 app 引用声明的权限的时候,需要保证两个 app 的签名一致。这样系统就会自动授予权限给第三方 app,而不提示给用户。
    • signatureOrSystem:这个权限是引用该权限的 app 需要有和系统同样的签名才能授予的权限,一般不推荐使用。
  2、为MainActivity加入启动权限:android:permission="com.lzx.permission.test"
再建一个Client工程
修改xml添加一个button按钮
修改MainActivity添加button点击事件
		((Button) findViewById(R.id.button1))
.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClassName("com.lzx.definepermission",
"com.lzx.definepermission.MainActivity");
startActivity(intent);
}
});
修改AndroidManifest.xml文件
<manifest 

xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lzx.client"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="com.lzx.permission.test" />
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.lzx.client.MainActivity"
android:label="@string/title_activity_main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
添加使用权限use-permission,使用刚才定义的permission
同时注意,给当前Activity也要加上访问权限
可能遇见问题:
1、secure问题,那是要启动加权限的Acitvity,当前启动者也要加上相关权限
2、Activity找不到,第一要先安装DefinePermission项目,第二要看你启动Activity的包是否写的正确。
另外关于权限,再讲个小知识,Android控件中会包含这样一条android:exported=true,表示此控件能被所在Application之外的其他Application所捕捉到,默认为false,不能捕捉到,即不能访问。

Android自定义权限和使用权限的更多相关文章

  1. Android自定义权限

    一.自定义权限 自定义权限,一般是考虑到应用共享组件时的安全问题.我们知道在四大组件 AndroidManifest 中注册的时候,添加 exported = "true" 这一属 ...

  2. Android自定义权限与使用

    1. 如何自定义权限 Android允许我们使用permission标签,在Manifest文件中定义属于自己的权限,一个例子如下, <?xml version="1.0" ...

  3. Android M Permission 运行时权限 学习笔记

    Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...

  4. 谈谈Android 6.0运行时权限理解

    前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6. ...

  5. Android开发-API指南-系统权限

    System Permissions 英文原文:http://developer.android.com/guide/topics/security/permissions.html 采集日期:201 ...

  6. Android PermissionUtils:运行时权限工具类及申请权限的正确姿势

    Android PermissionUtils:运行时权限工具类及申请权限的正确姿势 ifadai 关注 2017.06.16 16:22* 字数 318 阅读 3637评论 1喜欢 6 Permis ...

  7. Android O 获取APK文件权限 Demo案例

    1. 通过 aapt 工具查看 APK权限 C:\Users\zh>adb pull /system/priv-app/Settings . /system/priv-app/Settings/ ...

  8. android 6.0(23)的权限管理

    前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6. ...

  9. [android开发篇]权限分类:正常权限和危险权限

    https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous 系统权限 本文内容 安全架构 ...

随机推荐

  1. html/css 钢琴黑白格布局

    效果图:

  2. CentOS_7.2安装Nginx_1.9

    一.安装依赖包和开发工具: yum install vim vim-enhanced wget zip unzip telnet ntsysv compat* apr* nasm* gcc gcc* ...

  3. angularJs,ionic字符串操作

    1.首先我们需要把一段"文本或字符串"中的我们想进行操作的"字符串","字"筛选出来,代码如下: app.filter('replaceCo ...

  4. Android之NDK开发(转)

    Android之NDK开发 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第 ...

  5. 1472. Martian Army

    http://acm.timus.ru/problem.aspx?space=1&num=1472 题目大意: 一颗树,根节点(1) 的值为 1.0,所有叶子节点的值为 0.0 ,其他节点值任 ...

  6. 初次接触json...

    这两天发现很多网站显示图片版块都用了瀑布流模式布局的:随着页面滚动条向下滚动,这种布局还会不断加载数据并附加至当前尾部.身为一个菜鸟级的程序员,而且以后可能会经常与网站打交道,我觉得我还是很有必要去尝 ...

  7. c# 中int.ToString()的格式化的示例

    格式化数值:有时,我们可能需要将数值以一定的格式来呈现,就需要对数值进行格式化.我们使用格式字符串指定格式.格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符, ...

  8. 计算机网络(8)-----TCP报文段的首部格式

    TCP报文段的首部格式 概述 TCP报文段首部的前20个字节是固定的,因此TCP首部的最小长度是20字节. 源端口和目标端口 各占2个字节,分别写入源端口号和目的端口号. 序列号 占4个字节,表示本报 ...

  9. json处理总结(前端js和后端java)

    前端(js): json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,下面将介绍两者之间的相互转换. json字符串:var st ...

  10. 3、jvm内存分配实例

    参数:-Xmx20m -Xms20m -XX:NewRatio=1 -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:PermSize=2m 结果: Heap P ...