Android Permission

Android 6.0(API 23)开始,系统权限分为两类:正常权限和危险权限。
正常权限不会不会给用户隐私带来风险,应用清单中如果列出了正常权限,系统会自动授予正常权限。
危险权限会授予应用访问用户机密数据的权限,应用清单中如果列出了危险权限,必须用户明确批准应用使用这些权限。

如果设备运行的是Android5.1或者更低的版本(API 22-),使用危险权限必须在应用清单中申请,且用户必须在安装时授予此权限,如果不授予权限,应用无法安装。
如果设备运行的是Android6.0或者更高的版本(API 23+),使用危险权限必须在应用清单中申请,但用户不必须在安装时授予权限,拒绝权限时仍可以继续运行有限的功能。应用必须在运行时请求每项危险权限。

检查权限:
int checkSelfPermission (Context context, String permission)
eg:
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR);
返回值为PackageManager.PERMISSION_GRANTED(具有权限)
PERMISSION_DENIED(不具有权限)

shouldShowRequestPermissionRationale()
如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。
如果用户在过去拒绝了权限请求,并在权限请求系统对话框中选择了 Don't ask again 选项,此方法将返回 false。如果设备规范禁止应用具有该权限,此方法也会返回 false。

void requestPermissions (Activity activity,  String[] permissions,  int requestCode)
// 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.
    }
}

使用Android权限的原则:
1.只申请那些有必要的权限
2.如果有addtional libraries,需要注意libraries所需要的权限
3.权限对用户保持透明,即在需要的时候申请权限
4.使系统权限明确,对敏感功能提供连续的指示?

你可能感兴趣的:(Android Permission)