android 权限 permission

权限
athat can be used to limittoorof this or other . See thein the , and theandfor moreon howwork.
声明一个用来限制此应用或其他应用访问特殊组件或功能的安全权限 。请参阅简介中的部分以及安全与权限文档,了解更多权限如何工作的信息 。
权限等级:
从 6.0 (API级别23)开始,用户可以在运行时统一或拒绝某些应用权限 。但是,无论您的应用支持哪个版本,您都必须使用清单中元素声明所有版本权限请求 。授予应用权限后,该应用便能使用受保护的功能 。否则,该应用在尝试访问这些功能时会失败 。
请求应用权限 向清单添加权限
对于所有版本,要声明应用需要某项权限,请在应用清单中添加元素,作为顶级元素的子项 。例如网络访问权限:
...
检查权限
应用需要一项危险权限,那么每次执行需要该权限的操作时必须检查自己是否具有该权限 。.0开始用于可以随时取消权限,因此每次使用功能时都需要请求权限
权限检查:调用.()方法 。例如是否可以向日历写入数据:
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR)!= PackageManager.PERMISSION_GRANTED) {// Permission is not granted}
请求权限
当您的应用从收到时需要提示用户授予该权限 。提供了几种方法来请求权限
使用()方法来请求权限,例如检查读取用户联系人权限没有权限则请求:
// Here, thisActivity is the current activityif (ContextCompat.checkSelfPermission(thisActivity,Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED) {// Permission is not granted// Should we show an explanation?if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,Manifest.permission.READ_CONTACTS)) {// Show an explanation 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; request the permissionActivityCompat.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.}} else {// Permission has already been granted}
处理权限请求响应
当用户响应您应用的权限请求时,系统会调用应用的esult()方法,在调用过程中向其传递用户响应 。您的应用必须替换该方法以查明是否授予响应权限 。在回调过程中传递的请求代码与传递给()的请求代码相同 。例如,如果应用请求访问权限,则它可能采用以下回调方法:
@Overridepublic 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.}}
应用权限最佳做法 遵循以下原则:仅使用应用正常工作所需的权限注意库所需的权限公开透明让系统以显式方式询问 自己的实现