Android权限笔记

1、Android 是一个权限分隔的操作系统,其中每个应用都有其独特的系统标识(Linux 用户 ID 和组 ID)。

在安装时,Android 为每个软件包提供唯一的 Linux 用户 ID。

由于在进程级实施安全性,因此任何两个软件包的代码通常都不能在同一进程中运行,因为它们需要作为不同的 Linux 用户运行。您可以在每个软件包的 AndroidManifest.xml 的 manifest 标记中使用 sharedUserId 属性,为它们分配相同的用户 ID。这样做以后,两个软件包将被视为同一个应用,具有相同的用户 ID 和文件权限。

2、应用存储的任何数据都会被分配该应用的用户ID,并且其他软件包通常无法访问这些数据。使用 getSharedPreferences(String, int)、openFileOutput(String,int) 或 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory) 创建新文件时,可以使用MODE_WORLD_READABLE 和/或 MODE_WORLD_WRITEABLE 标记允许任何其他软件包读取/写入文件。

3、添加权限:将<uses-permission> 元素置于应用清单manifest中,作为顶级 <manifest> 元素的子项。

4、系统权限分为两类:正常权限和危险权限:

正常权限不会直接给用户隐私权带来风险。如果您的应用在其清单中列出了正常权限,系统将自动授予该权限。

危险权限会授予应用访问用户机密数据的权限。如果您列出了危险权限,则用户必须明确批准您的应用使用这些权限(参见5)。

5、如果设备运行的是 Android 5.1或更低版本,或者应用的目标 SDK 为 22 或更低:如果应用在manifest中列出了危险权限,则用户必须在安装应用时授予此权限;如果他们不授予此权限,系统根本不会安装应用。

如果设备运行的是 Android 6.0 或更高版本,或者应用的目标 SDK 为 23 或更高:如果应用在manifest中列出了危险权限,则它必须在运行时请求其需要的每项危险权限。用户可以授予或拒绝每项权限,且即使用户拒绝权限请求,应用仍可以继续运行有限的功能。

6、检查权限:ContextCompat.checkSelfPermission(,):

Context.checkCallingPermission (Stringpermission):检查调用该方法的进程是否有该权限;

Context.checkPermission (String permission,int pid, int uid):检查系统中特定的pid,uid是否有该权限;

PackageManager.checkPermission (StringpermName, String pkgName):检查特定的包是否有该权限;

以上检查权限的方法返回一个int,如果应用具有此权限,那么方法将返回 PackageManager.PERMISSION_GRANTED,如果应用不具有此权限,那么方法将返回PERMISSION_DENIED。

7、权限请求及响应

如果应用尚无所需的权限,则应用必须调用一个 requestPermissions() 方法,以请求适当的权限。

申请权限:ActivityCompat.requestPermissions( thisActivity, new  String[]{Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_READ_CONTACTS);

当用户响应时,系统将调用应用的 onRequestPermissionsResult() 方法,向其传递用户响应。因此应用程序必须实现onRequestPermissionsResult(int requestCode, String permissions[],  int[] grantResults)方法。

8、自动权限调整:Android 将根据为targetSdkVersion 属性提供的值决定应用是否需要权限。如果该值低于在其中添加权限的版本,则 Android 会自动添加该权限。

9、权限组:如果设备运行的是 Android6.0(API 级别 23),并且应用的 targetSdkVersion 是 23 或更高版本,则当用户请求危险权限时,系统显示的对话框说明了您的应用需要访问的权限组,它不会列出具体权限。用户只需要为每个权限组授予一次权限。

10、此外,可以在所需的组件上使用android:permission 属性,限制访问系统或应用的全部组件。

Activity 权限(应用于<activity> 标记)限制谁可以启动相关的 Activity。

Service 权限(应用于<service> 标记)限制谁可以启动或绑定到相关的服务。

BroadcastReceiver 权限(应用于<receiver> 标记)限制谁可以发送广播给相关的接收方。

ContentProvider 权限(应用于<provider> 标记)限制谁可以访问 ContentProvider 中的数据。

11、自定义权限:在AndroidManifest.xml中使用一个或多个<permission> 元素声明,可在组件上使用自定义权限。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值