Android学习笔记--- 文件的操作模式.各个应用之间的文件权限
- 格式:pdf
- 大小:49.01 KB
- 文档页数:1
Android读写文件权限流程概述在A nd ro id开发中,应用程序需要获取特定的权限以便能够读取和写入设备上的文件。
本文将介绍An dr oi d中读写文件权限的流程,帮助开发者了解如何正确处理文件访问权限相关的问题。
为什么需要文件权限A n dr oi d系统为了保护用户的隐私和数据安全,对应用程序的文件访问进行了限制。
如果应用程序想要读取或写入设备上的文件,必须首先获取相应的权限。
否则,在没有权限的情况下进行文件操作将会引发安全异常。
文件读取权限步骤1:在A n d r o i dM a n i f e s t.x m l中声明权限要读取设备上的文件,首先需要在应用的清单文件(A nd ro id Ma ni fe st.xm l)中声明文件读取权限。
可以使用以下代码将读取权限添加到清单文件中:<u se s-p e rm is si on an dr oid:na me="an dr oi d.p e rm is si on.R EA D_E X TE RN AL_ S T OR AG E"/>这个权限允许应用程序读取外部存储(如S D卡)上的文件。
步骤2:检查权限在代码中进行文件读取操作前,需要先检查应用是否已经获得了文件读取权限。
可以使用以下代码来检查权限:i f(C on te xt Co mp at.c he ck Se lf Pe rm iss i on(c on te xt,M ani f es t.p e r mi ss io n.RE AD_EX T ER NA L_ST OR AG E)!=Pa ck ag eM an ag er.P ER MI SS I O N_G RA NT ED){//没有读取权限,请求权限}e ls e{//已经有读取权限,进行文件读取操作}步骤3:请求权限如果在步骤2中检查到没有读取权限,应该向用户请求获取该权限。
android读写文件权限流程
一、 Android读写文件权限介绍
Android SDK提供了文件 I/O 的功能,它使开发人员可以使用简单
的API操作本地文件系统。
在Android 6.0 及更高版本中,对文件I/O,
用户必须显式地获取权限才能继续进行操作。
Android针对本地文件读写,提供了相应的权限控制,主要有类似的
内容:
1、读取外部存储文件权限:
2、写入外部存储文件权限:
二、Android文件读写权限流程
Android读写文件权限的整个流程如下:
1、应用开发者在AndroidManifest文件中声明
“android.permission.READ_EXTERNAL_STORAGE”和
“android.permission.WRITE_EXTERNAL_STORAGE”权限;
2、当用户启动应用的时候,系统会检测应用是否声明了需要申请的
权限;
3、如果声明了需要申请的权限,系统就会向用户发出权限请求提示;
4、用户选择同意或拒绝;
5、如果用户同意,系统会授予该应用相应的权限;
6、如果用户拒绝,应用就无法使用该权限。
三、Android文件读写权限的注意事项
1、在Android 6.0及更高版本中,开发者需要在AndroidManifest 中声明需要申请的权限;
2、在申请权限的时候,要确保用户理解其申请的权限;
3、如果用户拒绝权限,应用就无法使用该权限;。
Android权限分析一.Linux 权限介绍Linux 系统同 Unix 系统一样,通过信任状(credential)把进程与一个特定的用户或用户组捆绑在一起。
信任状决定了每个进程能做什么,不能做什么,从而保证整个系统的数据完整性和整体稳定性。
1.文件类型Linux 中的文件共有如下几种类型,由于 Android 中不同类型的文件会通过不同的方式来设置权限位,故简单介绍 Linux 中的文件类型如下: 1).普通文件。
对应system.img 和 ramdisk.img 中的所有文件。
2).目录文件。
对应 system.img 和ramdisk.img 中的所有目录。
3).块特殊文件。
基本存在于 /sys、/proc 和 /dev 三个目录中。
4).字符特殊文件。
基本存在于 /sys、/proc 和 /dev 三个目录中。
5).FIFO。
用于进程间通信,也叫命名管道,只能由相关进程使用。
6).套接字。
用于网络间进程通信,也可用于本机的非网络通信。
一般都在/dev/socket 下。
7).符号链接。
指向另一个文件。
注:查看文件详细信息时,文件类型显示在文件权限位的前面。
命令:ls -l 或 ll 命令2.文件访问权限位文件访问权限位的组成:u(owner) | g(group) | o(other) r w x r w x r w x 4 2 1 4 2 1 4 2 1注:修改文件权限时使用 chmod 命令,格式如下:chmod path 644 chmod path 777二.Android 权限管理概述Android 是一个多进程系统,每一个应用程序(不论是 C 或 C++ 编译而成的二进制程序,还是运行在 dalvik 虚拟机中的 APK 包格式的 Java 程序)都运行在自己的进程中。
Android 使用标准的 Linux 功能集实现了大多数应用程序和系统之间的安全性,例如通过被分配给应用程序的用户和用户组 ID,但该权限粒度较大,一般用于控制进程可访问的具体资源和设备。
Android学习笔记032之数据存储—文件存储读取我们知道,在AndroidOS中,提供了五中数据存储方式,分别是:ContentProvider存储、文件存储、SharedPreference存储、SQLite数据库存储、网络存储。
其中ContentProvider存储在我们介绍ContentProvider的时候已经介绍过了,现在我们学习其它的数据存储方式。
这一篇,我们介绍文件存储。
1、文件的操作模式我们在学Java的时候都知道,Java中的IO操作来进行文件的保存和读取,Android是基于Linux的,与Java不同的是Android在Context类中封装好了输入流和输出流的获取方法,分别是:FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数用于指定文件名,第二个参数指定打开文件的模式。
Android 提供的文件模式有:MODE_PRIVATE:Android提供的默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。
MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
此外,Android还提供了其它几个重要的文件操作的方法:getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录File getFilesDir():获取app的data目录下的绝对路径String[] fileList():返回app的data目录下数的全部文件deleteFile(String fileName):删除app的data目录下的指定文件2、读写文件Android的读写文件和Java一样,也是一样通过IO操作实现,下面我们通过一个简单的例子走一下这个流程:布局文件代码:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><EditTextandroid:id="@+id/ed_file_save"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/btn_file_save"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="保存内容" /><Buttonandroid:id="@+id/btn_file_read"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="读取内容" /><TextViewandroid:id="@+id/tv_read_file"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:textColor="#000"android:textSize="14sp" /></LinearLayout>Activity代码:package com.example.datasave;import android.content.Context;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*** Created by Devin on 2016/7/19.*/public class FileDataActivity extends AppCompatActivity {private EditText ed_file_save;private Button btn_file_save;private Button btn_file_read;private TextView tv_read_file;private String fileName = " hello.txt";@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_file);ed_file_save = (EditText) findViewById(R.id.ed_file_save);btn_file_save = (Button) findViewById(R.id.btn_file_save);btn_file_read = (Button) findViewById(R.id.btn_file_read);tv_read_file = (TextView) findViewById(_read_file);btn_file_save.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {String fileContent = ed_file_save.getText().toString();try {save(fileContent);ToastUtils.showToast(FileDataActivity.this, "文件写入成功");} catch (Exception e) {e.printStackTrace();ToastUtils.showToast(FileDataActivity.this, "文件写入失败");}}});btn_file_read.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {try {String content = read();tv_read_file.setText("文件的内容是:" + content);} catch (IOException e) {e.printStackTrace();ToastUtils.showToast(FileDataActivity.this, "读取文件失败!");}}});}public void save(String fileContent) throws Exception {FileOutputStream output = this.openFileOutput(fileName, Context.MODE_PRIV ATE);output.write(fileContent.getBytes());output.close();}public String read() throws IOException {//打开文件输入流FileInputStream input = this.openFileInput(fileName);byte[] temp = new byte[1024];StringBuffer stringBuffer = new StringBuffer("");int len = 0;while ((len = input.read(temp)) > 0) {stringBuffer.append(new String(temp, 0, len));}//关闭输入流input.close();return stringBuffer.toString();}}最后是实现效果图:这里文件使用的模式是私有模式,只能本应用读取还会覆盖原文件,这样就可以实现简单的文件读写。
android移动应用开发技术课第一章笔记第一章:Android移动应用开发技术课笔记一、引言在当今移动互联网时代,Android系统以其开放性和普及率成为了最受欢迎的移动操作系统之一。
随着移动应用市场的不断扩大,对Android移动应用开发技术的需求也日益增加。
学习和掌握Android移动应用开发技术成为了越来越多人的选择。
二、Android移动应用开发技术概述1. 什么是Android?Android是一款基于Linux操作系统的开源移动设备操作系统,主要用于触摸屏移动设备,如智能手机和平板电脑。
Android操作系统的开放性使得开发者可以自由定制和开发应用,受到了广大用户的喜爱。
2. Android移动应用开发技术的重要性随着信息化和数字化的发展,移动应用成为了人们获取信息和进行交流的重要方式。
而Android作为最主流的移动操作系统之一,其应用的开发和推广具有巨大的市场潜力和商业价值。
掌握Android移动应用开发技术成为了许多开发者和从业者的追求目标。
三、学习Android移动应用开发技术的重要性1. 对于个人的意义学习Android移动应用开发技术可以提升个人的职业技能,并且在移动应用开发领域有更多的发展机会。
可以通过开发自己的应用来实现个人价值和创造财富。
2. 对于企业的意义随着移动互联网的发展,各类企业都希望拥有自己的移动应用,以提升品牌形象和服务用户。
懂得Android移动应用开发技术的人才对企业来说显得格外宝贵。
四、学习Android移动应用开发技术的途径1. 自学通过阅读相关书籍、网上教程和参加线上培训班,可以自学Android 移动应用开发技术。
这种方式需要具备较好的自学能力和毅力。
2. 参加培训班选择权威的培训机构进行系统的学习和培训,可以更快速、系统地学习Android移动应用开发技术。
五、Android移动应用开发技术的未来发展随着人工智能、物联网、区块链等技术的不断发展,Android移动应用开发技术也将不断拓展应用场景和技术深度。
文件的权限Android 是基于Linux 的操作系统,因此Android 的文件权限其实就是Linux 的文件权限。
在Linux中一个文件一共有三个组别:用户、群组、其它。
其中每个组包含三种权限:读r、写w、执行x,也就是说一个文件共有9个权限属性(如图1-6所示)。
图1-6 文件权限属性图1-6 中的第一个属性代表文件类型,不属于权限范畴。
剩下的9 位从左往右1 到3 位是[用户],4到6 位是[群组],7 到9 位是[其它]。
举例:通过DDMS的File Explorer查看文件信息(如图1-7),可以看到某个文件的权限为:-rwxrw-r--他的意思就是[用户]对其享有读写执行的权限,[群组]享有读写权限,[其它]享有读权限。
10The furthest distance in the worldIs not between life and deathBut when I stand in front of youYet you don't know thatI love you.The furthest distance in the worldIs not when I stand in front of youYet you can't see my loveBut when undoubtedly knowing the love from both Yet cannot be together.The furthest distance in the worldIs not being apart while being in loveBut when I plainly cannot resist the yearningYet pretending you have never been in my heart.The furthest distance in the worldIs not struggling against the tidesBut using one's indifferent heartTo dig an uncrossable riverFor the one who loves you.倚窗远眺,目光目光尽处必有一座山,那影影绰绰的黛绿色的影,是春天的颜色。
安卓测试如何进行应用程序的文件权限测试以保护用户隐私在安卓平台上,应用程序的文件权限测试是非常重要的,它可以保护用户的隐私和数据安全。
通过对应用程序的文件权限进行测试,可以确保应用程序不会访问或篡改用户的敏感数据。
本文将介绍如何进行安卓测试以保护用户隐私。
1. 了解安卓应用程序的文件权限安卓应用程序通过文件权限来决定对设备上文件和文件夹的访问权限。
文件权限分为读取权限和写入权限两种。
读取权限允许应用程序读取设备上的文件,而写入权限则允许应用程序在设备上创建或修改文件。
了解应用程序的文件权限是进行文件权限测试的第一步。
2. 创建测试计划在进行应用程序的文件权限测试之前,制定一个详细的测试计划是必要的。
测试计划应包括要评估的权限范围、测试工具的选择以及测试的系统环境等。
此外,还应考虑到应用程序在不同版本的安卓系统上的表现,以确保测试结果的全面性和准确性。
3. 使用适当的测试工具在进行文件权限测试时,可以使用一些专门的测试工具来辅助进行测试。
例如,可以使用Android Debug Bridge(ADB)工具来模拟应用程序的权限请求和用户授权操作。
另外,还可以使用一些第三方权限测试工具,如OWASP ZAP和Burp Suite等,来测试应用程序是否存在文件权限的漏洞。
4. 模拟权限请求和用户授权为了测试应用程序对文件权限的申请和用户授权的处理情况,可以通过ADB工具来模拟权限请求和用户授权操作。
首先,需要确定应用程序在何种情况下会发出文件权限请求。
然后,通过ADB命令来模拟这些权限请求,观察应用程序在用户授权之前和之后的行为。
5. 检查应用程序的文件访问行为在获得文件访问权限后,应用程序可能会尝试访问设备上的敏感文件。
为了确保应用程序不会访问或篡改用户的敏感数据,可以通过监视文件访问行为来进行检查。
可以使用工具来监控应用程序对文件的读取和写入操作,并将结果与权限范围进行对比。
6. 分析测试结果并修复问题在进行文件权限测试后,需要对测试结果进行分析,并找出潜在的问题和漏洞。
AndroidMPermission运⾏时权限学习笔记Android M Permission 运⾏时权限学习笔记从Android 6.0开始, ⽤户需要在运⾏时请求权限, 本⽂对运⾏时权限的申请和处理进⾏介绍, 并讨论了使⽤运⾏时权限时新⽼版本的⼀些处理. Android应⽤权限简要介绍⼀个Android应⽤默认情况下是不拥有任何权限的, 这即是说, 在默认情况下, ⼀个应⽤是没有权利去进⾏⼀些可能会造成不好影响的操作的. 这些不好的影响可能是对其它应⽤,操作系统,或者是⽤户.如果应⽤需要⼀些额外的能⼒,则它需要在AndroidManifest.xml中静态地声明相应的权限.如果应⽤没有在manifest中声明权限, 却使⽤了相应的功能, 在调⽤到相应功能的时候, 将会抛出异常.⽐如程序要发送⼀个请求,却忘记加Internet权限, 那么在发送这个请求的时候程序就会抛出异常,⼀般不会catch这个异常,所以程序直接就崩溃了: Caused by: ng.SecurityException: Permission denied (missing INTERNET permission?)在Android 6.0 (API 23)发布之前, 所有的权限都在安装应⽤的时候显⽰给⽤户,⽤户选择安装则表⽰全部接受这些权限, 之后⽆法撤销对这些权限的授权. Android 6.0开始, ⼀部分⽐较危险的权限需要在程序运⾏时显式弹框,请求⽤户授权.⾄于什么时候弹这个框,由应⽤程序⾃⼰决定.对于其他权限,认为不是很危险,所以仍然保持原来的做法,在⽤户安装应⽤程序时就予以授权.还需要注意的是,在设置中,对于应⽤的危险权限,⽤户可以选择性地进⾏授权或者关闭.Permission的保护等级permission的保护等级通过protectionLevel属性设置, 共有4种: normal,dangerous,signature,signatureOrSystem.具体可以参见介绍:签名相关的⽐较不常⽤, 剩下的两种是normal和dangerous.Guides⾥⾯对这两种类型进⾏了讨论: 官⽹Guides:总结下来就是: 所有的权限仍然在manifest中静态声明, normal权限的在安装的时候⾃动授权, ⽽dangerous的权限需要应⽤明确地请求⽤户授权.当然对于Android 6.0以下的⼿机,或者以前开发的旧应⽤来说, dangerous权限也是安装时授权的, 具体看下⼀节的讨论.Dangerous Permissions:Table 1. Dangerous permissions and permission groups.Permission Group Permissions想要查看所有dangerous的权限, 也可以⽤命令:adb shell pm list permissions -g -d⼿机版本和程序版本的不同处理这⾥引⽤⼀段Guides⾥⾯的原⽂:If the device is running Android 6.0 (API level 23) or higher, and the app's is 23 or higher, the app requests permissions from the user at run-time.The user can revoke the permissions at any time, so the app needs to check whether it has the permissions every time it runs. For moreinformation about requesting permissions in your app, see the training guide.If the device is running Android 5.1 (API level 22) or lower, or the app's is 22 or lower, the system asks the user to grant the permissions when the user installs the app. If you add a new permission to an updated version of the app, the system asks the user to grant that permission when the user updates the app. Once the user installs the app, the only way they can revoke the permission is by uninstalling the app.这⾥头要注意and和or的使⽤,说明了只有满⾜targetSdkVersion和实际使⽤设备的版本都在23及以上的时候,才会采⽤新的动态权限机制. 其他情况, 跟之前⼀样, 在安装和升级应⽤的时候就授权了所有的权限.可以总结为:1.所有的权限都在manifest中声明.2.如果(1)你的app的targetSdkVersion是23及以上,并且(2)app运⾏在Android 6.0及以上的设备,危险权限必须动态请求.当权限被拒绝,app理应还是能够使⽤的,只不过权限相关的部分功能不能⽤.3.上⼀条中的两个条件(1)(2)没有同时满⾜,即属于其他情况, 所有权限在安装时请求,如果⽤户不接受,则不安装.特别注意这种情况: 旧应⽤新系统.如果targetSdkVersion⼩于23,即被认为是Android 6.0发布之前开发的应⽤, 还没有兼容6.0.这种应⽤即便是被装在Android 6.0的机器上,也是采⽤原来的安装即授予权限逻辑, 所有权限在应⽤安装时全部被授权.在Android 6.0的设备上安装targetSdkVersion⼩于23的应⽤之后, 可以在应⽤的设置中查看,发现所有的dangerous权限状态都是打开.所以不⽤担⼼⽼的应⽤在Android 6.0上会各种乱崩.但是⽤户仍然可以在系统设置中禁⽤权限:在模拟器上点击授权开关的时候弹出了以下提⽰:如果⽤户执意要取消授权, 应⽤虽然不会直接崩溃,但是功能变为默默⽆作为状态, 返回值可能变为null或者0,进⽽引起⽆法预料的⾏为或者崩溃.为什么要及时升级targetSdkVersion这是因为每⼀个版本的API有可能会产⽣新的权限,这些新增的权限, 对于targetSdkVersion⽐该API低的应⽤是⾃动获取的.所以targetSdkVersion最好是能及时写到最新,这样避免应⽤⾃动获取到新API新增的权限.结论: 对targetSdkVersion还不存在的权限是⾃动获取到的.可以参见: API Guides:其中”Automatic permission adjustments”那段.Permission group所有的权限都有⾃⼰的permission group.系统弹框请求某⼀个permission时也是只说明了它的类别,当⽤户同意,系统会给予它该条permission.(只有这⼀条).但是如果app已经有了该group下的另⼀条permission,系统将会⾃动授予权限(也即请求权限的callback直接返回),这过程中不与⽤户交互.动态权限请求的实现原⽂:因为权限动态检查相关的API是Android 6.0才加⼊的, 所以minSdkVersion不是23时,推荐使⽤SupportLibrary来实现,好处是: 程序⾥不必加if来判断当前设备的版本.1.检查权限状态如果执⾏的操作需要⼀个dangerous permission, 那么每次在执⾏操作的地⽅都必须check你是否有这个permission, 因为⽤户可以在应⽤设置⾥随意地更改授权情况, 所以必须每次在使⽤前都检查是否有权限.检查权限的⽅法: 两个参数分别是Context和权限名.返回值是: if you have the permission, or if not.⽐如:if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS)) { //has permission, do operation directlyContactsUtils.readPhoneContacts(this);Log.i(DEBUG_TAG, "user has the permission already!");} else {//do not have permission2.动态请求权限如果上⾯权限检查的结果是DENIED, 那么就需要显式地向⽤户请求这个权限了.Android提供了⼏个⽅法来动态请求权限, 调⽤这些⽅法会显⽰出⼀个标准的Dialog, 这个Dialog⽬前是不能被定制的.2.1有时候可能需要解释为什么需要这个权限有时候你可能会需要跟⽤户解释⼀下权限的⽤途.注意不是每条权限都需要解释,显⽽易见的那种可以不解释,太多的解释会降低⽤户体验.⼀种⽅式是,当⽤户拒绝过这个权限,但是⼜⽤到了这个功能, 那么很可能⽤户不是很明⽩为什么app需要这个权限, 这时候就可以先向⽤户解释⼀下.为了发现这种⽤户可能需要解释的情形, Android提供了⼀个⼯具类⽅法:如果app之前请求过该权限,被⽤户拒绝, 这个⽅法就会返回true.如果⽤户之前拒绝权限的时候勾选了对话框中”Don’t ask again”的选项,那么这个⽅法会返回false.如果设备策略禁⽌应⽤拥有这条权限, 这个⽅法也返回false.注意具体解释原因的这个dialog需要⾃⼰实现, 系统没有提供.2.2请求权限请求权限的⽅法是: 传⼊⼀个Activity, ⼀个permission名字的数组, 和⼀个整型的request code.这个⽅法是异步的,它会⽴即返回, 当⽤户和dialog交互完成之后,系统会调⽤回调⽅法,传回⽤户的选择结果和对应的request code.代码:if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS)) { //has permission, do operation directlyContactsUtils.readPhoneContacts(this);Log.i(DEBUG_TAG, "user has the permission already!");} else {//do not have permissionLog.i(DEBUG_TAG, "user do not have this permission!");// Should we show an explanation?if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission.READ_CONTACTS)) {// Show an explanation to the user *asynchronously* -- don't block// this thread waiting for the user's response! After the user// sees the explanation, try again to request the permission.Log.i(DEBUG_TAG, "we should explain why we need this permission!");} else {// No explanation needed, we can request the permission.Log.i(DEBUG_TAG, "==request the permission==");ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_READ_CONTACTS);// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an// app-defined int constant. The callback method gets the// result of the request.}}这个对话框是系统的,不能⾃定义.经验证, 请求权限对话框中的”Don’t ask again”的选项, 只有该条权限之前的状态是Denied的时候,才会出现.以前从未授权(即第⼀次弹框), 或者之前的状态是Granted(当然这种情况⼀般不会弹框询问), 出现的弹框都是不带该不再询问的选项的.2.3处理请求权限的响应当⽤户对请求权限的dialog做出响应之后,系统会调⽤⽅法,传回⽤户的响应.这个回调中request code即为调⽤时传⼊的参数,是app⾃定义的⼀个整型值.如果请求取消,返回的数组将会为空.代码:@Overridepublic void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {switch (requestCode) {case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {// If request is cancelled, the result arrays are empty.if (grantResults.length > 0&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {// permission was granted, yay! Do the// contacts-related task you need to do.ContactsUtils.readPhoneContacts(this);Log.i(DEBUG_TAG, "user granted the permission!");} else {// permission denied, boo! Disable the// functionality that depends on this permission.Log.i(DEBUG_TAG, "user denied the permission!");}return;}// other 'case' lines to check for other// permissions this app might request}}系统⾃动回调的情况:有⼀些情形下,调⽤1.⾃动授权: 如果⽤户已经允许了permission group中的⼀条A权限,那么当下次调⽤⽅法请求同⼀个group中的B权限时, 系统会直接调⽤回调⽅法, 并传回的结果.2.⾃动拒绝: 如果⽤户选择了不再询问此条权限,那么app再次调⽤⽅法来请求同⼀条权限的时候,系统会直接调⽤回调,返回.Demo地址:Best Practices原⽂:Best Practices 总结:1.⽤Intent启动其他应⽤来完成功能.2.只⽤真的需要的权限.3.不要⼀次请求多个权限来烦⽤户,有的权限可以等到要⽤的时候再请求.4.向⽤户解释为什么需要这个权限.5.从Android6.0开始,每⼀条权限,都需要测试开关两种状态下是不是都能让应⽤正常运⾏,⽽不是崩溃.并且相关的权限可能会需要测试不同的组合.ADB命令可以⽤命令⾏来管理权限:Use the tool to manage permssions from the command line:List permissions and status by group:$ adb shell pm list permissions -d -gGrant or revoke one or more permissions:$ adb shell pm [grant|revoke] <permission-name> ...参考资料:API Guides:Training:Runtime permissions:permission element:设计Patterns -> Permissions:博客⽂章:第三⽅库:PermissionsDispatcher:RxPermissions:Grant:本⽂地址:本⽂Demo地址:。
Android应⽤的权限配置和权限列表权限配置写在Mainifest.xml⽂件中:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.example.mxmtxtreader"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="21" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.GET_PACKAGE_SIZE" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".BookActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity><activityandroid:name=".ReadingActivity"android:label="@string/app_name" ></activity><activityandroid:name=".ImportBook"android:label="@string/menu_import" ></activity></application></manifest>可配置的权限列表如下:访问登记属性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,改变⽹络状态如是否能联⽹android.permission.CHANGE_WIFI_MULTICAST_STATE,改变WiFi多播状态改变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是否在顶层android.permission.GET_ACCOUNTS,访问GMail账户列表访问账户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,发送短信android.permission.SET_ACTIVITY_WATCHER,设置Activity观察器⼀般⽤于monkey测试设置Activity观察其设置闹铃提醒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,更新设备状态使⽤证书E_CREDENTIALS,允许程序请求验证从AccountManager使⽤SIP视频E_SIP,允许程序使⽤SIP视频服务使⽤振动android.permission.VIBRATE,允许振动唤醒锁定android.permission.WAKE_LOCK,允许程序在⼿机屏幕关闭后后台进程仍然运⾏android.permission.WRITE_APN_SETTINGS,写⼊⽹络GPRS接⼊点设置写⼊GPRS接⼊点设置写⼊⽇程提醒android.permission.WRITE_CALENDAR,写⼊⽇程,但不可读取写⼊联系⼈android.permission.WRITE_CONTACTS,写⼊联系⼈,但不可读取写⼊外部存储android.permission.WRITE_EXTERNAL_STORAGE,允许程序写⼊外部存储,如SD卡上写⽂件android.permission.WRITE_GSERVICES,允许程序写⼊Google Map服务数据写⼊Google地图数据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在线同步设置写⼊在线同步设置。
android各种权限及说明android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded)android.permission.ACCESS_COARSE_LOCATION允许⼀个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location)android.permission.ACCESS_FINE_LOCATION允许⼀个程序访问精良位置(如GPS) (Allows an application to access fine (e.g., GPS) location)android.permission.ACCESS_LOCATION_EXTRA_COMMANDS允许应⽤程序访问额外的位置提供命令(Allows an application to access extra location provider commands)android.permission.ACCESS_MOCK_LOCATION允许程序创建模拟位置提供⽤于测试(Allows an application to create mock location providers for testing)android.permission.ACCESS_NETWORK_STATE允许程序访问有关GSM⽹络信息(Allows applications to access information about networks)android.permission.ACCESS_SURFACE_FLINGER允许程序使⽤SurfaceFlinger底层特性(Allows an application to use SurfaceFlinger’s low level features)android.permission.ACCESS_WIFI_STATE允许程序访问Wi-Fi⽹络状态信息(Allows applications to access information about Wi-Fi networks)android.permission.ADD_SYSTEM_SERVICE允许程序发布系统级服务(Allows an application to publish system-level services).android.permission.BATTERY_STATS允许程序更新⼿机电池统计信息(Allows an application to update the collected battery statistics)android.permission.BLUETOOTH允许程序连接到已配对的蓝⽛设备(Allows applications to connect to paired bluetooth devices)android.permission.BLUETOOTH_ADMIN允许程序发现和配对蓝⽛设备(Allows applications to discover and pair bluetooth devices)android.permission.BRICK请求能够禁⽤设备(⾮常危险)(Required to be able to disable the device (very *erous!).)android.permission.BROADCAST_PACKAGE_REMOVED允许程序⼴播⼀个提⽰消息在⼀个应⽤程序包已经移除后(Allows an application to broadcast a notification that an application package has been removed)android.permission.BROADCAST_STICKY允许⼀个程序⼴播常⽤intents(Allows an application to broadcast sticky intents)android.permission.CALL_PHONE允许⼀个程序初始化⼀个电话拨号不需通过拨号⽤户界⾯需要⽤户确认(Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed.)android.permission.CALL_PRIVILEGED允许⼀个程序拨打任何号码,包含紧急号码⽆需通过拨号⽤户界⾯需要⽤户确认(Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed)android.permission.CAMERA请求访问使⽤照相设备(Required to be able to access the camera device. )android.permission.CHANGE_COMPONENT_ENABLED_STATE允许⼀个程序是否改变⼀个组件或其他的启⽤或禁⽤(Allows an application to change whether an application component (other than its own) is enabled or not. )android.permission.CHANGE_CONFIGURATION允许⼀个程序修改当前设置,如本地化(Allows an application to modify the current configuration, such as locale. )android.permission.CHANGE_NETWORK_STATE允许程序改变⽹络连接状态(Allows applications to change network connectivity state)android.permission.CHANGE_WIFI_STATE允许程序改变Wi-Fi连接状态(Allows applications to change Wi-Fi connectivity state)android.permission.CLEAR_APP_CACHE允许⼀个程序清楚缓存从所有安装的程序在设备中(Allows an application to clear the caches of all installed applications on the device. ) android.permission.CLEAR_APP_USER_DATA允许⼀个程序清除⽤户设置(Allows an application to clear user data)android.permission.CONTROL_LOCATION_UPDATES允许启⽤禁⽌位置更新提⽰从⽆线模块(Allows enabling/disabling location update notifications from the radio. )android.permission.DELETE_CACHE_FILES允许程序删除缓存⽂件(Allows an application to delete cache files)android.permission.DELETE_PACKAGES允许⼀个程序删除包(Allows an application to delete packages)android.permission.DEVICE_POWER允许访问底层电源管理(Allows low-level access to power management)android.permission.DIAGNOSTIC允许程序RW诊断资源(Allows applications to RW to diagnostic resources. )android.permission.DISABLE_KEYGUARD允许程序禁⽤键盘锁(Allows applications to disable the keyguard )android.permission.DUMP允许程序返回状态抓取信息从系统服务(Allows an application to retrieve state dump information from system services.)android.permission.EXPAND_STATUS_BAR允许⼀个程序扩展收缩在状态栏,android开发⽹提⽰应该是⼀个类似windows mobile中的托盘程序(Allows an application to expand or collapse the status bar. )android.permission.FACTORY_TEST作为⼀个⼯⼚测试程序,运⾏在root⽤户(Run as a manufacturer test application, running as the root user. )android.permission.FLASHLIGHT访问闪光灯,android开发⽹提⽰htc Dream不包含闪光灯(Allows access to the flashlight )android.permission.FORCE_BACK允许程序强⾏⼀个后退操作是否在顶层activities(Allows an application to force a BACK operation on whatever is the top activity. ) android.permission.FOTA_UPDATE暂时不了解这是做什么使⽤的,android开发⽹分析可能是⼀个预留权限.android.permission.GET_ACCOUNTS访问⼀个帐户列表在Accounts Service中(Allows access to the list of accounts in the Accounts Service)android.permission.GET_PACKAGE_SIZE允许⼀个程序获取任何package占⽤空间容量(Allows an application to find out the space used by any package. )android.permission.GET_TASKS允许⼀个程序获取信息有关当前或最近运⾏的任务,⼀个缩略的任务状态,是否活动等等(Allows an application to get information about the currently or recently running tasks: a thumbnail representation of the tasks, what activities are running in it, etc.)android.permission.HARDWARE_TEST允许访问硬件(Allows access to hardware peripherals. )android.permission.INJECT_EVENTS允许⼀个程序截获⽤户事件如按键、触摸、轨迹球等等到⼀个时间流,android 开发⽹提醒算是hook技术吧(Allows an application to inject user events (keys, touch, trackball) into the event stream and deliver them to ANY window.)android.permission.INSTALL_PACKAGES允许⼀个程序安装packages(Allows an application to install packages. )android.permission.INTERNAL_SYSTEM_WINDOW允许打开窗⼝使⽤系统⽤户界⾯(Allows an application to open windows that are for use by parts of the system user interface. ) android.permission.INTERNET允许程序打开⽹络套接字(Allows applications to open network sockets)android.permission.MANAGE_APP_TOKENS允许程序管理(创建、催后、 z- order默认向z轴推移)程序引⽤在窗⼝管理器中(Allows an application to manage (create, destroy, Z-order) application tokens in the window manager. )android.permission.MASTER_CLEAR⽬前还没有明确的解释,android开发⽹分析可能是清除⼀切数据,类似硬格机android.permission.MODIFY_AUDIO_SETTINGS允许程序修改全局⾳频设置(Allows an application to modify global audio settings)android.permission.MODIFY_PHONE_STATE允许修改话机状态,如电源,⼈机接⼝等(Allows modification of the telephony state – power on, mmi, etc. )android.permission.MOUNT_UNMOUNT_FILESYSTEMS允许挂载和反挂载⽂件系统可移动存储(Allows mounting and unmounting file systems for removable storage. )android.permission.PERSISTENT_ACTIVITY允许⼀个程序设置他的activities显⽰(Allow an application to make its activities persistent. )android.permission.PROCESS_OUTGOING_CALLS允许程序监视、修改有关播出电话(Allows an application to monitor, modify, or abort outgoing calls)android.permission.READ_CALENDAR允许程序读取⽤户⽇历数据(Allows an application to read the user’s calendar data.)android.permission.READ_CONTACTS允许程序读取⽤户联系⼈数据(Allows an application to read the user’s contacts data.)android.permission.READ_FRAME_BUFFER允许程序屏幕波或和更多常规的访问帧缓冲数据(Allows an application to take screen shots and more generally get access to the frame buffer data)android.permission.READ_INPUT_STATE允许程序返回当前按键状态(Allows an application to retrieve the current state of keys and switches. )android.permission.READ_LOGS允许程序读取底层系统⽇志⽂件(Allows an application to read the low-level system log files. )android.permission.READ_OWNER_DATA允许程序读取所有者数据(Allows an application to read the owner’s data)android.permission.READ_SMS允许程序读取短信息(Allows an application to read SMS messages.)android.permission.READ_SYNC_SETTINGS允许程序读取同步设置(Allows applications to read the sync settings)android.permission.READ_SYNC_STATS允许程序读取同步状态(Allows applications to read the sync stats)android.permission.REBOOT请求能够重新启动设备(Required to be able to reboot the device. )android.permission.RECEIVE_BOOT_COMPLETED允许⼀个程序接收到 ACTION_BOOT_COMPLETED⼴播在系统完成启动(Allows an application to receive theACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. )android.permission.RECEIVE_MMS允许⼀个程序监控将收到MMS彩信,记录或处理(Allows an application to monitor incoming MMS messages, to record or perform processing on them. )android.permission.RECEIVE_SMS允许程序监控⼀个将收到短信息,记录或处理(Allows an application to monitor incoming SMS messages, to record or perform processing on them.)android.permission.RECEIVE_WAP_PUSH允许程序监控将收到WAP PUSH信息(Allows an application to monitor incoming WAP push messages. )android.permission.RECORD_AUDIO允许程序录制⾳频(Allows an application to record audio)android.permission.REORDER_TASKS允许程序改变Z轴排列任务(Allows an application to change the Z-order of tasks)android.permission.RESTART_PACKAGES允许程序重新启动其他程序(Allows an application to restart other applications)android.permission.SEND_SMS允许程序发送SMS短信(Allows an application to send SMS messages)android.permission.SET_ACTIVITY_WATCHER允许程序监控或控制activities已经启动全局系统中Allows an application to watch and control how activities are started globally in the system.android.permission.SET_ALWAYS_FINISH允许程序控制是否活动间接完成在处于后台时Allows an application to control whether activities are immediately finished when put in the background.android.permission.SET_ANIMATION_SCALE修改全局信息⽐例(Modify the global animation scaling factor.)android.permission.SET_DEBUG_APP配置⼀个程序⽤于调试(Configure an application for debugging.)android.permission.SET_ORIENTATION允许底层访问设置屏幕⽅向和实际旋转(Allows low-level access to setting the orientation (actually rotation) of the screen.)android.permission.SET_PREFERRED_APPLICATIONS允许⼀个程序修改列表参数PackageManager.addPackageToPreferred() 和PackageManager.removePackageFromPreferred()⽅法(Allows an application to modify the list of preferred applications with the PackageManager.addPackageToPreferred() and PackageManager.removePackageFromPreferred() methods.)android.permission.SET_PROCESS_FOREGROUND允许程序当前运⾏程序强⾏到前台(Allows an application to force any currently running process to be in the foreground.)android.permission.SET_PROCESS_LIMIT允许设置最⼤的运⾏进程数量(Allows an application to set the maximum number of (not needed) application processes that can be running. )android.permission.SET_TIME_ZONE允许程序设置时间区域(Allows applications to set the system time zone)android.permission.SET_WALLPAPER允许程序设置壁纸(Allows applications to set the wallpaper )android.permission.SET_WALLPAPER_HINTS允许程序设置壁纸hits(Allows applications to set the wallpaper hints)android.permission.SIGNAL_PERSISTENT_PROCESSES允许程序请求发送信号到所有显⽰的进程中(Allow an application to request that a signal be sent to all persistent processes)android.permission.STATUS_BAR允许程序打开、关闭或禁⽤状态栏及图标Allows an application to open, close, or disable the status bar and its icons.android.permission.SUBSCRIBED_FEEDS_READ允许⼀个程序访问订阅RSS Feed内容提供(Allows an application to allow access the subscribed feeds ContentProvider. )android.permission.SUBSCRIBED_FEEDS_WRITE系统暂时保留改设置,android开发⽹认为未来版本会加⼊该功能。
Android学习笔记---文件的操作模式.各个应用之间的文件权限13_文件的操作模式 ---------------------------------------1.注意在应用相同的情况下,不同的项目一定不要用相同的包名这样的话,会被视为是一个应n n n 用 ----------------------------------2.a.Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访n n n n 问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文 n n n n 件可以使用Context.MODE_APPEND n b.Context.MODE_PRIVATE:只可以被本应用访问,不可以被其他应用访问---------------------------------3. Unable to find instrumentation target package的问题本例为以下DemoDao类进行单元测试----------------新建DemoDao.java-------------- package er.test.dao; n n import android.util.Log; n n public class DemoDao{ n n public void save() { Log.i("DemoDao", "用来测试的方法"); } } ----------------新建DemoDaoTest.java-------------- package er.test.dao; n n import android.test.AndroidTestCase; import android.util.Log; n n n n n n public class DemoDaoTest extends AndroidTestCase { n n public void testSave() { new DemoDao().save(); Log.i("DemoDaoTest", "测试"); } n n } -------------------------------AndroidManifest.xml--------------------------<?xml version="1.0"encoding="utf-8"?> <manifest xmlns:android="/apk/res/android"package="er.test.dao" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon"android:label="@string/app_name"> <uses-library android:name="android.test.runner"/> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN" /> <categoryandroid:name="UNCHER" /> </intent-filter> </activity> </application><instrumentation android:name="android.test.InstrumentationTestRunner"n n nandroid:targetPackage="er.test.dao"n n n android:label="Testing"></instrumentation></manifest> 上面配置文件中 MainActivity为android程序入口,请自已新建代码略 <uses-library android:name="android.test.runner"/>不可修改 android:name="android.test.InstrumentationTestRunner 不可修改 android:label="Testing"可不写如出现Test run failed:Unable to find instrumentation target package 是因为android:targetPackage="er.test.dao" 必须和 <manifestxmlns:android="/apk/res/android" package="er.test.dao" package相同的包名 -------------------------------------------------------------------3.新建一个项目来测试,在n FileOutputStream outStream=context.openFileOutput(filename,Context.MODE_PRIVATE); n 模式下,其他应用不可以访问用这个模式创建的文件 -------------------------------------------------------a.创建Android项目OherFile b./OherFile/src/com/credream/otherfile/OherFileActivity.java n这个文件自动生成 c./OherFile/src/com/credream/othertest/AccessOtherPrivateTest.java n packagecom.credream.othertest; n n import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; n n import android.test.AndroidTestCase; import android.util.Log; n n public class AccessOtherPrivateTest extends AndroidTestCase {private static final StringTAG="AccessOtherPrivateTest"; public void testAccessPrivate() throws Throwable{ n n Stringpath="/data/data/com.credream.file/files/lidewei.txt"; File file=new File(path); ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); FileInputStream inputStream=new FileInputStream(file); byte[] buffer=new byte[1024]; int len=0; while ((len=inputStream.read (buffer))!=-1){ outputStream.write(buffer,0,len); } byte[] data=outputStream.toByteArray(); outputStream.close(); inputStream.close(); String content=new String(data); Log.i(TAG, content); } } -------------------------------------------------------d./OherFile/AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifestxmlns:android="/apk/res/android" n n package="com.credream.otherfile" n n android:versionCode="1" n n android:versionName="1.0" > n n n n <uses-sdkandroid:minSdkVersion="8" /> n n n n <application n n n n android:icon="@drawable/ic_launcher" n n n n android:label="@string/app_name" > n n n n <activity n n n n n nandroid:label="@string/app_name" n n n n n n android:name=".OherFileActivity" > n n n n n n<intent-filter > n n n n n n n n <action android:name="android.intent.action.MAIN" /> n n n n n n n n n n <category android:name="UNCHER" /> n n n n n n </intent-filter> n n n n </activity> n n <uses-library android:name="android.test.runner" /> n n n n</application> n n n<instrumentation android:name="android.test.InstrumentationTestRunner" n android:targetPackage="com.credream.otherfile" android:label="Tests for My App"n n n /></manifest> --------------------------------------------------------e.在AccessOtherPrivateTest.java选择那个方法来右键Android junit ntest来测试n 出现如下错误:java.io.FileNotFoundException: /data/data/com.credream.file/files/lidewei.txtn n n (Permission denied) at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method) atorg.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152) atjava.io.FileInputStream.<init>(FileInputStream.java:82) atcom.credream.othertest.AccessOtherPrivateTest.testAccessPrivate n n(AccessOtherPrivateTest.java:17) at ng.reflect.Method.invokeNative(Native Method) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) atandroid.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) atandroid.test.InstrumentationTestRunner.onStart n n (InstrumentationTestRunner.java:520) at android.app.Instrumentation$InstrumentationThread.run n n (Instrumentation.java:1447)提示没有权限 n 说明在模式下,其他应用无法访问该文件; -----------------------------------------------------2.第二种操作模式: n Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新n n n n 文件。