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会去向系统请求相应的权限,第一次请求,系统会弹出警告框:
不论点击哪个选项,均会走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定义的提醒框,见图:
点击取消:走Activity的
onPermissionsDenied(intrequestCode,Listperms)
;
点击确定:弹出对话框:
点击拒绝(不点勾勾):走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的对话框:
点取消:代表取消申请了;
点去设置:跳到系统的app设置中
在这用户手动设置权限就可以了;
如果前面的申请都拒绝了,只要没有选过小勾勾,则走的流程都和第二次申请的流程一样;
如果前面的申请都拒绝了,只要有选过小勾勾,则流程也和第二次申请的流程类似,只是会少了,第一个弹框,即只会没有下面这个弹框(推测是EasyPermissions做了判断,如果没有勾选“不再提醒”则弹框,否则不弹框),后续步骤一样:
看完这篇,还不是很清楚的,可以看我另一片文章,里面的代码可以直接复制来用
EasyPermissions的流程,更加详细