EasyPermissions的流程简介和记录

package com.example.administrator.myeasypermissions;
import android.Manifest;import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;import android.view.View;
import android.widget.TextView;import android.widget.Toast;
import java.util.List;
import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions;

public class Main3Activity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {    

private static final int CALL_PHONE = 0x01;   

 @Override   
 protected void onCreate(@Nullable Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.test_activity);        
               TextView mTvCallPhone = (TextView) findViewById(R.id.tv_contacts);
               mTvCallPhone.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                      requestCallPhonePermission();
                  } 
             });
    }

    @AfterPermissionGranted(CALL_PHONE)
    public void requestCallPhonePermission() {
        String[] perms = {Manifest.permission.CALL_PHONE};
        if (EasyPermissions.hasPermissions(this, perms)) {
//            call();
        } else {
            EasyPermissions.requestPermissions(this, "xxx请求拨打电话权限!", CALL_PHONE, perms);
        }
    }

    @Override
    public void onPermissionsGranted(int requestCode, List perms) {//权限同意        Toast.makeText(this, "你允许了本权限", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPermissionsDenied(int requestCode, List perms) {//权限拒绝
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
            new AppSettingsDialog.Builder(this, "为了您能使用电话功能,请开启打电话权限!").setTitle("提示").setPositiveButton("去设置").setNegativeButton("取消", null).setRequestCode(CALL_PHONE).build().show();
        }else{
            Toast.makeText(this, "你拒绝了本权限,将无法使用部分功能", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }}

触发点击事件,先调用
EasyPermissions.requestPermissions(this,"xxx请求拨打电话权限!",CALL_PHONE,perms);
后,EasyPermissions会去向系统请求相应的权限,第一次请求,系统会弹出警告框:

EasyPermissions的流程简介和记录_第1张图片

不论点击哪个选项,均会走Activity的方法
onRequestPermissionsResult(intrequestCode,@NonNullString[] permissions,@NonNullint[] grantResults)
然后转交给
EasyPermissions.onRequestPermissionsResult(requestCode,permissions,grantResults,this);

如果选择的是允许,则会走Activity的
onPermissionsGranted(intrequestCode,Listperms);
方法,表示用户允许相应权限,然后就可以做后续的操作;
如果选择的是拒绝,则走
onPermissionsDenied(intrequestCode,Listperms);
方法,表示用户拒绝相应权限,
EasyPermissions.somePermissionPermanentlyDenied(this,perms);
方法表示这个权限是否被“不再提醒”了(就是把那个小勾勾点上了,这个东西,只会在第一次拒绝后,再申请权限的时候出现),所以此时是走else的;
如果第一次已经拒绝了对应权限,则第二次申请权限时(因为此时还没有选过“不再提醒”),会弹出EasyPermissions定义的提醒框,见图:

EasyPermissions的流程简介和记录_第2张图片

点击取消:走Activity的
onPermissionsDenied(intrequestCode,Listperms)
点击确定:弹出对话框:

EasyPermissions的流程简介和记录_第3张图片

点击拒绝(不点勾勾):走Activity的
onRequestPermissionsResult(intrequestCode,@NonNullString[] permissions,@NonNullint[] grantResults);
再走
onPermissionsDenied(intrequestCode,Listperms)
点击拒绝(点勾勾):走Activity的
onRequestPermissionsResult(intrequestCode,@NonNullString[] permissions,@NonNullint[] grantResults);
再走onPermissionsDenied(intrequestCode,Listperms)
此时
EasyPermissions.somePermissionPermanentlyDenied(this,perms)
会生效,走其中的语句:
newAppSettingsDialog.Builder(this,"为了您能使用电话功能,请开启打电话权限!").setTitle("提示").setPositiveButton("去设置").setNegativeButton("取消",null).setRequestCode(CALL_PHONE).build().show();
弹出EasyPermissions的对话框:

EasyPermissions的流程简介和记录_第4张图片

点取消:代表取消申请了;
点去设置:跳到系统的app设置中

EasyPermissions的流程简介和记录_第5张图片

在这用户手动设置权限就可以了;
如果前面的申请都拒绝了,只要没有选过小勾勾,则走的流程都和第二次申请的流程一样;
如果前面的申请都拒绝了,只要有选过小勾勾,则流程也和第二次申请的流程类似,只是会少了,第一个弹框,即只会没有下面这个弹框(推测是EasyPermissions做了判断,如果没有勾选“不再提醒”则弹框,否则不弹框),后续步骤一样:


EasyPermissions的流程简介和记录_第6张图片

看完这篇,还不是很清楚的,可以看我另一片文章,里面的代码可以直接复制来用
EasyPermissions的流程,更加详细

你可能感兴趣的:(EasyPermissions的流程简介和记录)