6.0

作者: eveo | 来源:发表于2016-06-07 15:25 被阅读46次

    适配 Android 6.0 (API level 23)

    官方文档的步骤

    (我建议你去看文档,不要看我的文章,我是给自己看的)
    官方路径:
    https://developer.android.com/training/permissions/requesting.html

    1、检查权限
      int permissionCheck =ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.READ_CONTACTS); 
    

    这里的permissionCheck只有两个返回值:
    (1)PackageManager.PERMISSION_GRANTED,app已经有了这个权限,你想干嘛就继续干下去吧,下面的文章也不用看;
    (2) PERMISSION_DENIED,app还没有权限呢,这时候你就惨了,一系列的问题要处理,往下看吧;

    2、注册权限

    由于上一步检查到APP还没有权限读联系人,所以我就要引导用户允许这个权限。
    (1)提醒用户
    提醒用户,要读取用户的联系人信息来做坏事了,噢,不是啦,帮用户找到用这个APP的好友啦。

    activity的话可以调用:
    boolean shouldShow=ActivityCompat.shouldShowRequestPermissionRationale(myActivity, perm);

    fragment的话可以调用:
    boolean shouldShow=myFragment.shouldShowRequestPermissionRationale(perm);

    拿shouldShow的值来说:
    返回true,就是APP在之前已经向用户申请过这个权限了,但是被用户狠心的拒绝了。
    返回false,更加严重,APP之前向用户申请读取联系人的时候,用户不单单拒绝了还选择了“不要再提醒了”,或者是你在系统的设置里对APP关闭了权限。

    所以这句也是在获取不到权限的情况下,应该作为第一条语句执行。跟用户解释下为啥要用这个权限呢,因为之前可能用户不理解。

    (2)正式注册
    requestPermissions();
    上面那一步提示无论执行,或者没有执行,接下来都需要调用requestPermissions()弹个框给用户选择,这个才是真正目的。上面就是一个提示而已,给用户看看,没啥鸟用。

    3、整个流程
    // 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.
    }
    

    }

    4、那我怎么知道用户对框的操作

    调用activity或者fragment的onRequestPermissionsResult()方法:

    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
    }
    }

    相关文章

      网友评论

          本文标题:6.0

          本文链接:https://www.haomeiwen.com/subject/wkbddttx.html