Android 6.0 (API 23) 开始
系统权限分为:正常权限和危险权限
在所有的 Android 版本中,应用清单应同时声明所需要的正常权限和危险权限
检查权限
// Assume thisActivity is the current activity
// PackageManager.PERMISSION_GRANTED or PackageManager.PERMISSION_DENIED
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.WRITE_CALENDAR);
请求权限
// 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.
}
}
当您的应用调用 requestPermissions() 时,系统将向用户显示一个标准对话框。您的应用无法配置或更改此对话框。如果您需要为用户提供任何信息或解释,您应在调用 requestPermissions() 之前进行,如解释应用为什么需要权限中所述。
处理权限请求响应
当应用请求权限时,系统将向用户显示一个对话框,当用户响应,系统将调用应用的 onRequestPermissionsResult() 方法
@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
}
}
TedPermission 的简单使用
new TedPermission(this)
.setPermissionListener(new PermissionListener() {
@Override
public void onPermissionGranted() {
// 权限开启
}
@Override
public void onPermissionDenied(ArrayList<String> arrayList) {
}
})
.setDeniedMessage("读取手机状态权限关闭") //权限关闭时提醒文字
.setPermissions(Manifest.permission.READ_PHONE_STATE) //申请的权限
.check();