首先查看权限是否授予:
官网代码
// Assume thisActivity is the current activityint permissionCheck = ContextCompat.checkSelfPermission(thisActivity,int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,

        Manifest.permission.WRITE_CALENDAR);

其中,如果已经注册权限,此方法会返回一个int值PackageManager.PERMISSION_GRANTED,此值为1.如果没有申请权限,将返回PackageManager.PERMISSION_DENIED,值为-1.

 

动态注册权限:

 

// 首先是判断if (ContextCompat.checkSelfPermission(thisActivity,                Manifest.permission.READ_CONTACTS)        != PackageManager.PERMISSION_GRANTED) {    // Should we show an explanation?    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,            Manifest.permission.READ_CONTACTS)) {      // 显示给用户的解释    } else {        // No explanation needed, we can request the permission.        ActivityCompat.requestPermissions(thisActivity,                new String[]{Manifest.permission.READ_CONTACTS},                MY_PERMISSIONS_REQUEST_READ_CONTACTS);    }}if (ContextCompat.checkSelfPermission(thisActivity,                Manifest.permission.READ_CONTACTS)        != PackageManager.PERMISSION_GRANTED) {    // Should we show an explanation?    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,            Manifest.permission.READ_CONTACTS)) {      // 显示给用户的解释    } else {        // No explanation needed, we can request the permission.        ActivityCompat.requestPermissions(thisActivity,                new String[]{Manifest.permission.READ_CONTACTS},                MY_PERMISSIONS_REQUEST_READ_CONTACTS);    }}
其中,ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)
方法用于判断是否该给用户一个解释为何需要打开此权限。如果已经请求过此权限并且用户拒绝,将返回true。

注意:如果用户在过去拒绝了权限请求,并在“权限请求系统”对话框中选择“不再次请求”选项,则此方法返回false。如果设备策略禁止应用程序具有该权限,该方法也会返回false。

 

 

new String[]{Manifest.permission.READ_CONTACTS}为你要申请的权限数组 String[]{Manifest.permission.READ_CONTACTS}为你要申请的权限数组

 

 

MY_PERMISSIONS_REQUEST_READ_CONTACTS为自定义的一个标记变量,以便在后续操作中判断。

 

。。。。。

当用户对弹出的提示框进行了操作时,将会回调onRequestPermissionsResult() 方法,因此可以在此方法中进行

相关操作。

 

@Overridepublic void onRequestPermissionsResult(int requestCode,        String permissions[], int[] grantResults) {    switch (requestCode) {        case MY_PERMIEAD_CONTACTS: {            // If request is cancelled, the result arrays are empty.            if (grantResults.length > 0                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 权限请求成功的操作            } else {    // 权限请求失败的操作            }            return;        }        // case其他权限结果。。    }}        String permissions[], int[] grantResults) {    switch (requestCode) {        case MY_PERMIEAD_CONTACTS: {            // If request is cancelled, the result arrays are empty.            if (grantResults.length > 0                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 权限请求成功的操作            } else {    // 权限请求失败的操作            }            return;        }        // case其他权限结果。。    }}

 

最后,还有一些需要注意的地方,例如,假如用户已经明确的指明拒绝该权限申请并不再提示,这时候就不应该再做任何与用户的交互。

 

 

 

更多相关文章

  1. Android官方文档翻译 一 Getting Started
  2. android 应用程序使用统计
  3. android屏蔽home键
  4. 服务器向Android写一个对象
  5. android之bundle传递数据--两个activities之间
  6. android > CallLog 通话记录
  7. Android(安卓)实现一个http 带参数登录
  8. Android(安卓)获取通话记录
  9. android上传视频

随机推荐

  1. ubuntu下无法更新android sdk
  2. Android(安卓)常用编程技巧
  3. android调用cocos2dx例子
  4. Android(安卓)配置 FileProvider
  5. android IP
  6. [置顶] Android学习博客和文章存档
  7. Android(安卓)控件布局常用属性
  8. android 电容屏(二):驱动调试之基本概念篇
  9. android修改底层键值
  10. 修改android 系统设置 android 版本