Android Runtime Permission

2017-08-10

参考资料

Android 6.0 新特性

Android Runtime Permission

Android 6.0(API 级别 23) 引入了一种新的权限模式,用户可以在运行时对管理应用权限。有点类似 iOS 。即使你的 APP 不去适配 Android 6.0,但是官方建议还是使用新的权限 API 去开发你的应用。

大致的使用流程如下:

  1. 在 AndroidManifest.xml 申明权限,添加 uses-permission ,这一步和以前的权限申请一致

  2. 检查权限,ContextCompat.checkSelfPermission() 方法。如果应用具有此权限,方法将返回 PackageManager.PERMISSION_GRANTED,并且应用可以继续操作。如果应用不具有此权限,方法将返回 PERMISSION_DENIED,且应用必须明确向用户要求权限。比如
    int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
    Manifest.permission.WRITE_CALENDAR);

  3. 请求权限,如果你的 APP 权限里有危险的权限(拍照,短信,麦克风),那么必须要要让用户授予权限,调用 shouldShowRequestPermissionRationale() 会弹出对话框让用户选择,这个对话框是不是能修改的! 来看下大致的代码:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation 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.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                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.
    }
}
  1. 处理权限请求回调,看代码
@Override
public 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.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

大致的流程就是上面的几步,怎么区分你的权限是否需要用户授权,可以查看https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous



注明:本文章属于转载,仅供行业人员学习交流使用,文章版权属于原创作者,在此向原创者致敬,感谢原创作者为大家学习交流提供精品内容。

站方声明:IThao123是为广大互联网从业者免费提供学习交流的平台,如果侵犯了原创著作权,请联系站方删除,给你带来不便,深表歉意。

顶部