Android 6.0运行时权限

官方给的样例Demo:
* A sample permissions request looks like this:
* <code>
* private void showContacts() {
* if ( checkSelfPermission (Manifest.permission.READ_CONTACTS)
* != PackageManager.PERMISSION_GRANTED) {
* requestPermissions (new String[]{Manifest.permission.READ_CONTACTS};
* PERMISSIONS_REQUEST_READ_CONTACTS);
* } else {
* doShowContacts();
* }
* }
*
* {@literal @}Override
* public void onRequestPermissionsResult (int requestCode, String[] permissions,
* int[] grantResults) {
* if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS
* && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
* showContacts();
* }
* }
* </code>




了解一下什么是运行时权限:






检查是否具有指定权限checkCallingPermission(String)

ContextWrapper.java (android-6.0\frameworks\base\core\java\android\content)
@Override
public int checkSelfPermission(String permission) {
return mBase.checkSelfPermission(permission);
}
mBase:Context,通常指上下文环境。



Context.java (android-6.0\frameworks\base\core\java\android\content)
@PackageManager.PermissionResult
public abstract int checkSelfPermission(@NonNull String permission);
该方法为抽象方法,具体实现在Context的子类ContextImpl中。



ContextImpl.java (android-6.0\frameworks\base\core\java\android\app)
@Override
public int checkSelfPermission(String permission) {
if (permission == null) { 1、非空判断,抛IllegalArgumentException异常
throw new IllegalArgumentException("permission is null");
}

return checkPermission(permission, Process.myPid(), Process.myUid()); 2、
}
就拿上面的样例Demo来讲, 此时申请的权限为READ_CONTACTS,也就是说permission = Manifest.permission.READ_CONTACTS。2处调用checkPermission方法,不仅要传参permission,还要传入当前进程的 pid、uid值。通俗地讲pid可以用作killProcess、sendSignal,而uid一般是用作数据共享。


@Override
public int checkPermission(String permission, int pid, int uid) {
if (permission == null) {
throw new IllegalArgumentException("permission is null");
}

try {
return ActivityManagerNative.getDefault().checkPermission(
permission, pid, uid); 1、
} catch (RemoteException e) {
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值