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的流程,更加詳細