GVKun编程网logo

Android系统编程入门系列之应用权限的定义与申请(安卓 应用权限)

27

对于Android系统编程入门系列之应用权限的定义与申请感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍安卓应用权限,并为您提供关于Android研究-Android系统编译、SDK编译、ADT

对于Android系统编程入门系列之应用权限的定义与申请感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍安卓 应用权限,并为您提供关于<转>Android研究-Android系统编译、SDK编译、ADT编译、Android开发环境建立、android | 申请存储权限的坑、Android 安全模型之 Android 安全机制(应用权限)、AndroidManifest.xml--android系统权限定义的有用信息。

本文目录一览:

Android系统编程入门系列之应用权限的定义与申请(安卓 应用权限)

Android系统编程入门系列之应用权限的定义与申请(安卓 应用权限)

在之前关于应用内数据本地保存为文件时,曾提到应用需要申请外部存储设备的读写权限才能访问外部存储中的文件。那么针对某一种权限,应用程序具体应该怎么申请使用呢?本文将详细介绍。

应用中的权限主要分为两类,分为正常权限和危险权限。在Android6.0即API 23之前,这两种权限均只需要在清单文件中声明即可,自Android6.0即API 23开始,危险权限不仅需要在清单文件中声明,还需要在代码使用该权限的界面Activity中动态申请,弹出权限申请框,由用户决定是否授权。应用所需要的权限列表及授权结果,可以从系统设置-应用管理-权限管理中查看。

这里对权限的分类与官网权限分类有所差异,为了便于理解,将官网的权限等级与本文中的权限分类对照关系绘制下表。

权限等级ProtectionLevel 本文权限分类
normal 正常权限
signature 正常权限
dangerous 危险权限
appop 正常权限

权限的相关设置,大多是在清单文件中配置的,只有在动态申请或增加附加权限与四大组件交互时需要在代码中配置。

如果应用程序如果需要使用某种权限,就必须在其清单文件中声明这些权限。

在清单文件中使用标签<uses-permission />,并为其属性android:name赋值,不同的权限分别定义了对应的字符串值。这些不同的权限可以从android.Manifest.permission权限类中查看。

从Android6.0即API 23开始,危险权限需要动态申请,并由用户主动授权后,才能继续执行获得授权后的操作,否则在未经授权时执行相关操作,程序运行时会抛出java.lang.SecurityException异常。

动态申请的权限,同样需要借助Context上下文环境对象来完成授权的相关操作。同时由于Android系统库的升级,下面涉及到的相关类,可以在老的系统支持库android.support.v4中找到,同样也可以在新版的androidx.core支持库中找到对应类。

动态申请权限,主要分为三个步骤,检查、请求、结果回调。

检查主要针对两个方向,一是检查应用程序是否已获得相关权限。调用ContextCompat.checkSelfPermission(Context context,String permission)静态方法,将上下文环境对象和相关权限的固定字符串分别作为参数传入即可。返回int类型的结果标注是否授权,其数值在android.content.pm.PackageManager类中以静态常量的形式分别定义了已授权的PERMISSION_GRANTED=0和未授权的PERMISSION_DENIED=-1

如果检查权限结果是已授权,那么可以执行获得该权限的后续操作。而当结果是未授权时,需要继续检查当前权限是否可向用户展示请求授权界面。调用ActivityCompat.shouldShowRequestPermissionRationale(android.app.Activity,java.lang.String)静态方法,参数activity是当前所在Activity界面对象,参数permission是相关权限字符串常量。返回boolean类型的结果,表示是否可正常展示请求授权界面。

如果检查展示请求授权界面结果失败,则需要提示用户相关权限无法正常授权,通常会提示用户可以到系统设置-权限管理中将该应用程序的相关权限打开,以正常执行应用程序获得授权后的操作。而当检查展示界面返回结果是true时,可以继续请求该权限。调用ActivityCompat.requestPermissions(Activity activity,int requestCode)静态方法,参数activity是当前所在Activity界面对象,参数permissions是多个权限字符串组成的数组,参数requestCode是当前请求值,可任意定义,同时该值与请求结果返回时对应一致。

这里注意,在请求权限时必须要传入Activity界面对象,也就是说要想请求权限,必须通过应用程序的某个已处于正常运行状态的可视界面。而所谓的请求权限,与界面之间的互相启动有些相似,其本质都是一样的。

最后是请求结果的回调,在请求权限的Activity界面中,重写方法public void onRequestPermissionsResult(int requestCode,int[] grantResults){}。在用户选择同意授权或拒绝授权后,由系统回调该方法。其中参数requestCode是请求值,与请求权限时的参数一致;参数permissions是相关的权限数组,同样与请求权限时的参数一致;参数grantResults是用户的授权结果,其数组索引与参数permissions中的索引一一对应,取值同样有表示已授权的PERMISSION_GRANTED=0和未授权的PERMISSION_DENIED=-1

在请求结果返回的所有权限均已授权后,边可以执行获得相关权限的后续操作。如果有未授权的权限,通常是执行异常操作,例如给用户相应提示并不再执行正常的后续操作。

另外,在检查权限相关操作返回如果某项权限在之前由用户选择拒绝授权并不再提示,

应用程序中对权限的使用方式在Android12之前可参考上述方式。那么具体系统提供了哪些权限,获得这些权限后可以做什么操作,这些问题将在后面的文章中介绍。

<转>Android研究-Android系统编译、SDK编译、ADT编译、Android开发环境建立

<转>Android研究-Android系统编译、SDK编译、ADT编译、Android开发环境建立

Android是嵌入式Linux发展的一个里程碑,近年来的嵌入式Linux应用之多,诸侯割据,也是时候有人来一统天下了,不说一统,也要给业界出个规范,出个信心,出个成功范本,Android就是嵌入式Linux的成功范例!

Android开放源码,对于研究嵌入式领域的方方面面都太有帮助了!驱动、操作系统、虚拟机、构建系统、Java语言、C/C++语言、对开源软件的整合等等,从Android中能学到太多太多!
本文从Android核心源码的下载、编译,以及ADT和SDK的编译和使用,给予详细介绍!

0. 介绍

ADT是Android针对eclipse的插件,提供了基本的工具,包括SDK的获取,配置等。所以开发Android应用ADT是必备工具!

SDK是软件开发包,各个平台都会放出SDK来供开发者使用!

Android源码中不包括kernel源码,需要另行下载编译!

SDK和ADT可直接从Android源码中编译获得!

repo是对git的封装,方便获取android源码的,源码用git维护的,所以用git获取源码也是一样的 

另:www.android.com网站上一切文档都有,网络上的文档也都是参照官方的!

 

一. 基本开发环境

Ubuntu-10.04即可,安装个本地源镜像,之后再安装软件包就速度飞快了!本文后续内容都假设系统为Ubuntu-10.04!

 

二. 安装Android编译需要的系统工具

官方参考页:http://source.android.com/source/initializing.html

(1)安装java环境

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk 
注意:ubuntu12.04下A. android需要的jdk6安装 		
B. http://www.oracle.com/technetwork/java/javase/downloads下载jdk6
C. 下载jdk-6u37-linux-x64.bin D. 放到合适的目录,如/home/rda/work/soft/,./安装到当前目录
E. 修改 ~/.bashrc增加环境变量

export JAVA_HOME=/usr/lib/jvm/java-7-sun //根据实际路径修改

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

(2)安装需要的软件包

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline5-dev libz-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc


三. 获取源码

官方参考页:http://source.android.com/source/downloading.html

当前的Android 代码托管在两个地方:  https://github.com/android  和  https://android.googlesource.com  之前在 android.git.kernel.org 上也有托管,不过现在重定向到了  https://android.googlesource.com  好在都支持git访问。

(0)sudo apt-get install git-core curl

(1)建立repo工具目录,repo是对git源码控制工具的封装

$ mkdir ~/bin
$ PATH=~/bin:$PATH

(2)获取repo工具

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

(3)初始化repo客户端

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

 

(4)获取源码
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0

 

$ repo sync -j1

 
 
 
 

  
  
  
此时可能因为连接过多,有错误发生,不过没关系,改用repo sync试试先.不行的话,用下边的方法再试试.

(4.0)如遇到错误:DownloadError: android.googlesource.com: <urlopen error [Errno 110] Connection timed out>

说明是服务器拒绝过多链接,可以申请下授权,比较简 单:

参考网址:http://blog.csdn.net/thl789/article/details/7524232

1. 浏览器登录https://android.googlesource.com/new-password,并用gmail帐号登录;

2. 点击网页上的“允许访问”,得到类似:

  1. machine android.googlesource.com login git-<userName>.gmail.com password <password>  
  2. machine android-review.googlesource.com login git-<userName>.gmail.com password <password>  

的 信 息。

3. 把上面那段信息(<userName>和<password>用自己得到的真实信息)追加到~/.netrc文件结尾;

4. 下载地址的URI更改为https://android.googlesource.com/a/platform /manifest(中间加上了“/a”)即可。

重复(3)步骤,用

repo init -u https://android.googlesource.com/a/platform/manifest -b android-4.0.1_r1
后,再repo sync即可.

四. 编译Android系统

1. 编译整个系统

官方参考链接:http://source.android.com/source/building.html

启动ccache会加速编译,不过也会产生问题,建议先不使用!

(1)启用环境

$ source build/envsetup.sh

(2)配置目标

$ lunch full-eng

(3)编译源码

$ make -j4

编译成功后,就可以运行模拟器看效果了,命令如下:

export ANDROID_PRODUCT_OUT=$PWD/out/target/product/generic

export ANDROID_SWT=$PWD/out/host/linux-x86/framework

export PATH=$PATH:$PWD/out/host/linux-x86/bin

emulator 即可看到效果了!

2. 编译SDK

(1)启用环境

$ source build/envsetup.sh

(2)配置目标

$ lunch sdk-eng

(3)编译源码

$ make sdk -j4

(4)编译结果在out/host/linux-x86/sdk目录就是sdk目录,此目录可备份下,以便后用

3. 编译ADT

export ECLIPSE_HOME=<XXXXXX> eclipse的根目录

sdk/eclipse/scripts/build_server.sh ./adt/

上边传说中的脚本可用来编译ADT,可我一直没成功!此处会依赖于后边的Eclipse,可在安装了Eclipse后再编译!

编译前,注意备份SDK.

4. 编译内核

官方参考链接:http://source.android.com/source/building-kernels.html

参考上面链即可,比较简单!


五.建立Eclipse上的Android开发环境

官方参考链接:http://developer.android.com/sdk/installing.html

(1)获取Eclipse

http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/indigo/SR2/eclipse-rcp-indigo-SR2-linux-gtk.tar.gz&url=http://download.actuatechina.com/eclipse/technology/epp/downloads/release/indigo/SR2/eclipse-rcp-indigo-SR2-linux-gtk.tar.gz&mirror_id=385

解压即可,直接能用了!建议下载rcp版本的!

(2)获取ADT

前边如果自己编译出来了,则按照道理说是不用再下载或者在线安装的,这里说下下载方法!

http://dl.google.com/android/ADT-18.0.0.zip 这个是目前最新的,下载即可

(3)安装ADT

Eclipse的Help里有个Install New Software,选择Achive,选择ADT-18.0.0.zip即可安装完成.

(4)安装SDK

SDK前边已经编译出来了,目录大约为out/host/linux-x86/sdk/,配置ADT的SDK目录即可,其他不用配置!

(5)创建一个AVD

AVD是虚拟设备,创建即可!

 

至此,本文把大概的Android的系统编译,SDK安装,开发环境等介绍了一下!

 

本文完!

android | 申请存储权限的坑

android | 申请存储权限的坑

android | 申请存储权限的坑

android6以上很多的权限不是只写manifest.xml就可以了,使用的时候需要懂太申请权限。
先贴个能跑的代码,具体细节有空补上:

public void needPrivilege(){
        //使用兼容库就无需判断系统版本
        int hasWriteStoragePermission = ContextCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
        int hasReadStoragePermission = ContextCompat.checkSelfPermission(getApplication(), Manifest.permission.READ_EXTERNAL_STORAGE);
        if (hasWriteStoragePermission == PackageManager.PERMISSION_GRANTED && hasReadStoragePermission == PackageManager.PERMISSION_GRANTED) {
            //拥有权限,执行操作
            Log.d(TAG, "拥有权限,直接执行");
            test();
        }else{
            //没有权限,向用户请求权限
            Log.d(TAG, "没有权限,申请权限");
            ActivityCompat.requestPermissions(this,
                    new String[]{
                            Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.READ_EXTERNAL_STORAGE
                    },mRequestCode);
        }
    }

    //请求权限后回调的方法
    //参数: requestCode  是我们自己定义的权限请求码
    //参数: permissions  是我们请求的权限名称数组
    //参数: grantResults 是我们在弹出页面后是否允许权限的标识数组,数组的长度对应的是权限名称数组的长度,数组的数据0表示允许权限,-1表示我们点击了禁止权限
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        boolean hasPermissiondismiss=false;//有权限没有通过
        if (mRequestCode == requestCode) {
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] == -1) {
                    hasPermissiondismiss = true;
                }
            }
            //如果有权限没有被允许
            if (hasPermissiondismiss) {
                //showPermissionDialog();//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问
                Toast.makeText(MainActivity.this, "没有存储权限,请手动授权", Toast.LENGTH_LONG).show();
            }else{
                // 执行操作
                Log.d(TAG, "申请到了权限,开始执行");
                test();
            }
        }
    }

Android 安全模型之 Android 安全机制(应用权限)

Android 安全模型之 Android 安全机制(应用权限)

进程沙箱为互不信任的应用程序之间提供了隔离机制,SharedUserID 则为具备信任关系的应用程序提供了共享资源的机制。然而,由于用户自行安装的应用程序也不具备可信性,在默认情况下,Android 应用程序没有任何权限,不能访问保护的设备 API 与资源。因此,权限机制是 Android 安全机制的基础,决定允许还是限制应用程序访问受限的 API系统资源。应用程序的权限需要明确定义,在安装时被用户确认,并且在运行时检查,执行,授予和撤销权限。在定制权限下,文件和内容提供者也可以受到保护。

具体而言,应用程序在安装时都分配有一个用户标志(UID)以区别于其他应用程序,保护自己的数据不被其他应用获取。Android 根据不同的用户和组,分配不同权限,比如访问网络,访问 GPS 数据等,这些 Android 权限在底层映射为 Linux 的用户与组权限

权限机制的实现层次简要概括如下:

  • 应用层显式声明权限:应用程序包(.apk 文件)的权限信息在 AndroidManifest.xml 文件中通过 <permission><premission-group> <permission-tree> 等标签指定。需要申请某个权限,使用 <uses-permission> 指定。

  • 权限声明包含权限名称,属于的权限组与保护级别

  • 权限组是权限按功能分成的不同集合,其中包含多个具体权限,例如,发短信,无线上网与拨打电话的权限可列入一个产生费用的权限组。

  • 权限的保护级别分为 NormalDangerousSignature Signatureorsystem 四种,不同的级别限定了应用程序行使此权限时的认证方式。比如,Normal 只要申请就可用,Dangerous 权限在安装时经用户确认才可用,Signature 与 Signatureorsystem 权限需要应用程序必须为系统用户,如 OEM 制造商或 ODM 制造商等。

  • 框架层与系统层逐级验证,如果某权限未在 AndroidManifest.xml 中声明,那么程序运行时会出错。通过命令行调试工具 logcat 查看系统日志可发现需要某权限的错误信息。

  • 共享 UID 的应用程序可与系统另一用户程序同一签名,也可同一权限。一般可在 AndroidManifest 文件中设置 sharedUserId,如 android:sharedUserId="android.uid.shared",以获得系统权限。但是,这种程序属性通常由 OEM 植入,也就是说对系统软件起作用。

Android 的权限管理模块在 2.3 版本之后,即使有 root 权限,仍无法执行很多底层命令和 API。例如,su 到 root 用户,执行 ls 等命令都会出现没有权限的错误。

AndroidManifest.xml--android系统权限定义

AndroidManifest.xml--android系统权限定义

原文链接:http://www.cnblogs.com/sardine/p/4035162.html

1. 系统编译结束自动生成的java类,描述系统所有定义的权限

out/target/common/R/android/Manifest.java

2. 权限检查方法

frameworks/base/core/java/android/app/ContextImpl.java

context.checkCallingOrSelfPermission("android.permission.SENSOR") context 是ContextImpl。

3. 申请的权限读取与保存

frameworks/base/services/java/com/android/server/pm/PackageManagerService.java

private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace) {

........


if (allowed) {
                    if ((ps.pkgFlags&ApplicationInfo.FLAG_SYstem) == 0
                            && ps.permissionsFixed) {
                        // If this is an existing, non-system package, then
                        // we can't add any new permissions to it.
                        if (!allowedSig && !gp.grantedPermissions.contains(perm)) {
                            allowed = false;
                            // Except...  if this is a permission that was added
                            // to the platform (note: need to only do this when
                            // updating the platform).
                            final int NP = PackageParser.NEW_PERMISSIONS.length;
                            for (int ip=0; ip<NP; ip++) {
                                final PackageParser.NewPermissionInfo npi
                                        = PackageParser.NEW_PERMISSIONS[ip];
                                if (npi.name.equals(perm)
                                        && pkg.applicationInfo.targetSdkVersion < npi.sdkVersion) {
                                    allowed = true;
                                    Log.i(TAG, "Auto-granting " + perm + " to old pkg "
                                            + pkg.packageName);
                                    break;
                                }
                            }
                        }
                    }
                    if (allowed) {
                        if (!gp.grantedPermissions.contains(perm)) {
                            changedPermission = true;
                            gp.grantedPermissions.add(perm);
                            gp.gids = appendInts(gp.gids, bp.gids);
                        } else if (!ps.haveGids) {
                            gp.gids = appendInts(gp.gids, bp.gids);
                        }
                    } else {
                        Slog.w(TAG, "Not granting permission " + perm
                                + " to package " + pkg.packageName
                                + " because it was prevIoUsly installed without");
                    }


.......

}

移除某些权限------seandroid

private void revokePermissions(......){
.....................................
HashSet<String> revokedPerms = mRevokePermissionPolicy.get(pkg.packageName);
        gp.effectivePermissions = (HashSet<String>) gp.grantedPermissions.clone();                                                                                                                                
        gp.revokedGids = null;
        if (revokedPerms != null) {        
            for (String grantedPerm : gp.grantedPermissions) {
                if (revokedPerms.contains(grantedPerm)) {
                    if (DEBUG_POLICY_REVOKE) {         
                        Slog.d(TAG, "Revoking effective permission " + grantedPerm
                               + " from " + pkg.packageName);                                                                                                                                                     
                    }
                    gp.effectivePermissions.remove(grantedPerm);
                    final BasePermission bp = mSettings.mPermissions.get(grantedPerm);
                    gp.revokedGids = appendInts(gp.revokedGids, bp.gids);                                                                                                                                         
                }
            }
        }
}

 

public static final String ACCOUNTS

这个常量定义了直接访问由账号管理器管理的账号的权限

常量值:android.permission-group.ACCOUNTS。

public static final String COST_MONEY

这个常量定义了能够让用户使用产生间接服务功能的权限。例如,这个权限组允许直接进行电话拨号、直接发送SMS消息等。

常量值:android.permission-group.COST_MONEY。

public static final String DEVELOPMENT_TOOLS

这个常量定义了相对开发特征的权限组。这些权限都不应该出现在普通的应用程序中,它们保护着仅用于开发目的的API。

常量值:android.permission-group.DEVELOPMENT_TOOLS

public static final String HARDWARE_CONTROLS

这个常量定义了用于提供直接访问设备上硬件的权限,包括声音、相机、振动器等。

常量值:android.permission-group.HARDWARE_CONTROLS

public static final String LOCALTION

这个常量定义了允许访问用户当前位置的权限。

常量值:android.permission-group.LOCATION

public static final String MESSAGES

这个常量定义了允许应用程序代表用户发送消息或中断用户正在接收的消息的权限。这个权限主要用于SMS/MMS消息,如接收或阅读MMS消息。

常量值:android.permission-group.MESSAGES

public static final String NETWORK

这个常量定义了提供访问网络服务的权限。主要权限是互联网访问,但是它也适用于访问或编辑网络配置,或者是其他相关的网络操作。

常量值:android.permission-group.NETWORK

public static final String PERSONAL_INFO

这个常量定义了提供访问用户私有数据的权限,如通讯录、日历事件、电子邮件等。包括数据的读写权限(一般情况下,它应该表现出两种不同的权限)。

常量值:android.permission-group.PERSONAL_INFO

public static final String PHONE_CALLS

这个常量定义了与访问和编辑电话状态相关联的权限:终端呼出的电话、阅读和编辑电话状态。要注意的是,电话拨号不在这个权限组中,因为它在更重要的“takin’yer moneys”(付费)组中

public static final String STORAGE

这个常量定义与SD卡访问相关的权限

常量值:android.permission-group.STORAGE

public static final String SYstem_TOOLS

这个常量定义与系统API相关的权限。其中有许多是没有权限的用户所期望了解的,并且这样的权限应该被标记为“normal”保护级别,因此这些权限也不会显示。但是,这种权限能够用于提供访问操作系统的一些杂项功能,如写入全局的系统设置。

常量值:android.permission-group.SYstem_TOOLS

 

 

 

=============================非系统应用程序可申请权限===================================

访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限
获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米
获取精确位置 android.permission.ACCESS_FINE_LOCATION,通过GPS芯片接收卫星的定位信息,定位精度达10米以内
访问定位额外命令 android.permission.ACCESS_LOCATION_EXTRA_COMMANDS,允许程序访问额外的定位提供者指令
获取模拟定位信息 android.permission.ACCESS_MOCK_LOCATION,获取模拟定位信息,一般用于帮助开发者调试应用
获取网络状态 android.permission.ACCESS_NETWORK_STATE,获取网络信息状态,如当前的网络连接是否有效
访问Surface Flinger android.permission.ACCESS_SURFACE_FLINGER,Android平台上底层的图形显示支持,一般用于游戏或照相机预览界面和底层模式的屏幕截图
获取WiFi状态 android.permission.ACCESS_WIFI_STATE,获取当前WiFi接入的状态以及WLAN热点的信息
账户管理 android.permission.ACCOUNT_MANAGER,获取账户验证信息,主要为GMail账户信息,只有系统级进程才能访问的权限
验证账户 android.permission.AUTHENTICATE_ACCOUNTS,允许一个程序通过账户验证方式访问账户管理ACCOUNT_MANAGER相关信息
电量统计 android.permission.BATTERY_STATS,获取电池电量统计信息
绑定小插件 android.permission.BIND_APPWIDGET,允许一个程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限
绑定设备管理 android.permission.BIND_DEVICE_ADMIN,请求系统管理员接收者receiver,只有系统才能使用
绑定输入法 android.permission.BIND_INPUT_METHOD ,请求InputMethodService服务,只有系统才能使用
绑定RemoteView android.permission.BIND_REMOTEVIEWS,必须通过RemoteViewsService服务来请求,只有系统才能用
绑定壁纸 android.permission.BIND_WALLPAPER,必须通过WallpaperService服务来请求,只有系统才能用
使用蓝牙 android.permission.BLUetoOTH,允许程序连接配对过的蓝牙设备
蓝牙管理 android.permission.BLUetoOTH_ADMIN,允许程序进行发现和配对新的蓝牙设备
变成砖头 android.permission.BRICK,能够禁用手机,非常危险,顾名思义就是让手机变成砖头
应用删除时广播 android.permission.broADCAST_PACKAGE_REMOVED,当一个应用在删除时触发一个广播
收到短信时广播 android.permission.broADCAST_SMS,当收到短信时触发一个广播
连续广播 android.permission.broADCAST_STICKY,允许一个程序收到广播后快速收到下一个广播
WAP PUSH广播 android.permission.broADCAST_WAP_PUSH,WAP PUSH服务收到后触发一个广播
拨打电话 android.permission.CALL_PHONE,允许程序从非系统拨号器里输入电话号码
通话权限 android.permission.CALL_PRIVILEGED,允许程序拨打电话,替换系统的拨号器界面
拍照权限 android.permission.CAMERA,允许访问摄像头进行拍照
改变组件状态 android.permission.CHANGE_COMPONENT_ENABLED_STATE,改变组件是否启用状态
改变配置 android.permission.CHANGE_CONfigURATION,允许当前应用改变配置,如定位
改变网络状态 android.permission.CHANGE_NETWORK_STATE,改变网络状态如是否能联网
改变WiFi多播状态 android.permission.CHANGE_WIFI_MULTICAST_STATE,改变WiFi多播状态
改变WiFi状态 android.permission.CHANGE_WIFI_STATE,改变WiFi状态
清除应用缓存 android.permission.CLEAR_APP_CACHE,清除应用缓存
清除用户数据 android.permission.CLEAR_APP_USER_DATA,清除应用的用户数据
底层访问权限 android.permission.CWJ_GROUP,允许CWJ账户组访问底层信息
手机优化大师扩展权限 android.permission.CELL_PHONE_MASTER_EX,手机优化大师扩展权限
控制定位更新 android.permission.CONTROL_LOCATION_UPDATES,允许获得移动网络定位信息改变
删除缓存文件 android.permission.DELETE_CACHE_FILES,允许应用删除缓存文件
删除应用 android.permission.DELETE_PACKAGES,允许程序删除应用
电源管理 android.permission.DEVICE_POWER,允许访问底层电源管理
应用诊断 android.permission.DIAGNOSTIC,允许程序到RW到诊断资源
禁用键盘锁 android.permission.disABLE_KEyguard,允许程序禁用键盘锁
转存系统信息 android.permission.DUMP,允许程序获取系统dump信息从系统服务
状态栏控制 android.permission.EXPAND_STATUS_BAR,允许程序扩展或收缩状态栏
工厂测试模式 android.permission.FACTORY_TEST,允许程序运行工厂测试模式
使用闪光灯 android.permission.FLASHLIGHT,允许访问闪光灯
强制后退 android.permission.FORCE_BACK,允许程序强制使用back后退按键,无论Activity是否在顶层
访问账户Gmail列表 android.permission.GET_ACCOUNTS,访问GMail账户列表
获取应用大小 android.permission.GET_PACKAGE_SIZE,获取应用的文件大小
获取任务信息 android.permission.GET_TASKS,允许程序获取当前或最近运行的应用
允许全局搜索 android.permission.GLOBAL_SEARCH,允许程序使用全局搜索功能
硬件测试 android.permission.HARDWARE_TEST,访问硬件辅助设备,用于硬件测试
注射事件 android.permission.INJECT_EVENTS,允许访问本程序的底层事件,获取按键、轨迹球的事件流
安装定位提供 android.permission.INSTALL_LOCATION_PROVIDER,安装定位提供
安装应用程序 android.permission.INSTALL_PACKAGES,允许程序安装应用
内部系统窗口 android.permission.INTERNAL_SYstem_WINDOW,允许程序打开内部窗口,不对第三方应用程序开放此权限
访问网络 android.permission.INTERNET,访问网络连接,可能产生GPRS流量
结束后台进程 android.permission.KILL_BACKGROUND_PROCESSES,允许程序调用killBackgroundProcesses(String).方法结束后台进程
管理账户 android.permission.MANAGE_ACCOUNTS,允许程序管理AccountManager中的账户列表
管理程序引用 android.permission.MANAGE_APP_TOKENS,管理创建、摧毁、Z轴顺序,仅用于系统
高级权限 android.permission.MTWEAK_USER,允许mTweak用户访问高级系统权限
社区权限 android.permission.MTWEAK_FORUM,允许使用mTweak社区权限
软格式化 android.permission.MASTER_CLEAR,允许程序执行软格式化,删除系统配置信息
修改声音设置 android.permission.MODIFY_AUdio_SETTINGS,修改声音设置信息
修改电话状态 android.permission.MODIFY_PHONE_STATE,修改电话状态,如飞行模式,但不包含替换系统拨号器界面
格式化文件系统 android.permission.MOUNT_FORMAT_FILESYstemS,格式化可移动文件系统,比如格式化清空SD卡
挂载文件系统 android.permission.MOUNT_UNMOUNT_FILESYstemS,挂载、反挂载外部文件系统
允许NFC通讯 android.permission.NFC,允许程序执行NFC近距离通讯操作,用于移动支持
永久Activity android.permission.PERSISTENT_ACTIVITY,创建一个永久的Activity,该功能标记为将来将被移除
处理拨出电话 android.permission.PROCESS_OUTGOING_CALLS,允许程序监视,修改或放弃播出电话
读取日程提醒 android.permission.READ_CALENDAR,允许程序读取用户的日程信息
读取联系人 android.permission.READ_CONTACTS,允许应用访问联系人通讯录信息
屏幕截图 android.permission.READ_FRAME_BUFFER,读取帧缓存用于屏幕截图
读取收藏夹和历史记录 com.android.browser.permission.READ_HISTORY_BOOKMARKS,读取浏览器收藏夹和历史记录
读取输入状态 android.permission.READ_INPUT_STATE,读取当前键的输入状态,仅用于系统
读取系统日志 android.permission.READ_LOGS,读取系统底层日志
读取电话状态 android.permission.READ_PHONE_STATE,访问电话状态
读取短信内容 android.permission.READ_SMS,读取短信内容
读取同步设置 android.permission.READ_SYNC_SETTINGS,读取同步设置,读取Google在线同步设置
读取同步状态 android.permission.READ_SYNC_STATS,读取同步状态,获得Google在线同步状态
重启设备 android.permission.REBOOT,允许程序重新启动设备
开机自动允许 android.permission.RECEIVE_BOOT_COMPLETED,允许程序开机自动运行
接收彩信 android.permission.RECEIVE_MMS,接收彩信
接收短信 android.permission.RECEIVE_SMS,接收短信
接收Wap Push android.permission.RECEIVE_WAP_PUSH,接收WAP PUSH信息
录音 android.permission.RECORD_AUdio,录制声音通过手机或耳机的麦克
排序系统任务 android.permission.REORDER_TASKS,重新排序系统Z轴运行中的任务
结束系统任务 android.permission.RESTART_PACKAGES,结束任务通过restartPackage(String)方法,该方式将在外来放弃
发送短信 android.permission.SEND_SMS,发送短信
设置Activity观察其 android.permission.SET_ACTIVITY_WATCHER,设置Activity观察器一般用于monkey测试
设置闹铃提醒 com.android.alarm.permission.SET_ALARM,设置闹铃提醒
设置总是退出 android.permission.SET_ALWAYS_FINISH,设置程序在后台是否总是退出
设置动画缩放 android.permission.SET_ANIMATION_SCALE,设置全局动画缩放
设置调试程序 android.permission.SET_DEBUG_APP,设置调试程序,一般用于开发
设置屏幕方向 android.permission.SET_ORIENTATION,设置屏幕方向为横屏或标准方式显示,不用于普通应用
设置应用参数 android.permission.SET_PREFERRED_APPLICATIONS,设置应用的参数,已不再工作具体查看addPackagetoPreferred(String) 介绍
设置进程限制 android.permission.SET_PROCESS_LIMIT,允许程序设置最大的进程数量的限制
设置系统时间 android.permission.SET_TIME,设置系统时间
设置系统时区 android.permission.SET_TIME_ZONE,设置系统时区
设置桌面壁纸 android.permission.SET_WALLPAPER,设置桌面壁纸
设置壁纸建议 android.permission.SET_WALLPAPER_HINTS,设置壁纸建议
发送永久进程信号 android.permission.SIGNAL_PERSISTENT_PROCESSES,发送一个永久的进程信号
状态栏控制 android.permission.STATUS_BAR,允许程序打开、关闭、禁用状态栏
访问订阅内容 android.permission.SUBSCRIbed_FeedS_READ,访问订阅信息的数据库
写入订阅内容 android.permission.SUBSCRIbed_FeedS_WRITE,写入或修改订阅内容的数据库
显示系统窗口 android.permission.SYstem_ALERT_WINDOW,显示系统窗口
更新设备状态 android.permission.UPDATE_DEVICE_STATS,更新设备状态
使用证书 android.permission.USE_CREDENTIALS,允许程序请求验证从AccountManager
使用SIP视频 android.permission.USE_SIP,允许程序使用SIP视频服务
使用振动 android.permission.VIBRATE,允许振动
唤醒锁定 android.permission.WAKE_LOCK,允许程序在手机屏幕关闭后后台进程仍然运行
写入GPRS接入点设置 android.permission.WRITE_APN_SETTINGS,写入网络GPRS接入点设置
写入日程提醒 android.permission.WRITE_CALENDAR,写入日程,但不可读取
写入联系人 android.permission.WRITE_CONTACTS,写入联系人,但不可读取
写入外部存储 android.permission.WRITE_EXTERNAL_STORAGE,允许程序写入外部存储,如SD卡上写文件
写入Google地图数据 android.permission.WRITE_GSERVICES,允许程序写入Google Map服务数据
写入收藏夹和历史记录 com.android.browser.permission.WRITE_HISTORY_BOOKMARKS,写入浏览器历史记录或收藏夹,但不可读取
读写系统敏感设置 android.permission.WRITE_SECURE_SETTINGS,允许程序读写系统安全敏感的设置项
读写系统设置 android.permission.WRITE_SETTINGS,允许读写系统设置项
编写短信 android.permission.WRITE_SMS,允许编写短信
写入在线同步设置 android.permission.WRITE_SYNC_SETTINGS,写入Google在线同步设置

转载于:https://www.cnblogs.com/sardine/p/4035162.html

关于Android系统编程入门系列之应用权限的定义与申请安卓 应用权限的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于<转>Android研究-Android系统编译、SDK编译、ADT编译、Android开发环境建立、android | 申请存储权限的坑、Android 安全模型之 Android 安全机制(应用权限)、AndroidManifest.xml--android系统权限定义等相关知识的信息别忘了在本站进行查找喔。

本文标签: