@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//TODO:已授权
} else {
//TODO:用户拒绝
}
}
(4).封装
public class BaseActivity extends AppCompatActivity {
private Map<Integer, Runnable> allowablePermissionRunnables = new HashMap<>();
private Map<Integer, Runnable> disallowablePermissionRunnables = new HashMap<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* 请求权限
* @param id 请求授权的id 唯一标识即可
* @param permission 请求的权限
* @param allowableRunnable 同意授权后的操作
* @param disallowableRunnable 禁止权限后的操作
*/
protected void requestPermission(int id, String permission, Runnable allowableRunnable, Runnable disallowableRunnable) {
if (allowableRunnable == null) {
throw new IllegalArgumentException("allowableRunnable == null");
}
allowablePermissionRunnables.put(id, allowableRunnable);
if (disallowableRunnable != null) {
disallowablePermissionRunnables.put(id, disallowableRunnable);
}
//版本判断
if (Build.VERSION.SDK_INT >= 23) {
//减少是否拥有权限
int checkCallPhonePermission = ContextCompat.checkSelfPermission(getApplicationContext(), permission);
if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
//弹出对话框接收权限
ActivityCompat.requestPermissions(BaseActivity.this, new String[]{permission}, id);
return;
} else {
allowableRunnable.run();
}
} else {
allowableRunnable.run();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Runnable allowRun = allowablePermissionRunnables.get(requestCode);
allowRun.run();
} else {
Runnable disallowRun = disallowablePermissionRunnables.get(requestCode);
disallowRun.run();
}
}
}
public class MainActivity extends BaseActivity implements View.OnClickListener{
private Button btCallPhone;
private Button btContact;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btCallPhone = (Button) findViewById(R.id.call_phone);
btContact = (Button) findViewById(R.id.contact);
btCallPhone.setOnClickListener(this);
btContact.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == btCallPhone){
//拨打电话
requestPermission(1, Manifest.permission.CALL_PHONE, new Runnable() {
@Override
public void run() {
callPhone();
}
}, new Runnable() {
@Override
public void run() {
callPhoneDenied();
}
});
}else if(v == btContact){
//读取联系人信息
requestPermission(2, Manifest.permission.WRITE_CONTACTS, new Runnable() {
@Override
public void run() {
readContact();
}
}, new Runnable() {
@Override
public void run() {
readContactDenied();
}
});
}
}
private void callPhone() {
Toast.makeText(MainActivity.this, "CALL_PHONE OK", Toast.LENGTH_SHORT)
.show();
}
private void callPhoneDenied() {
Toast.makeText(MainActivity.this, "CALL_PHONE Denied", Toast.LENGTH_SHORT)
.show();
}
private void readContact() {
ContentResolver cr = getContentResolver();
String str[] = {ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.PHOTO_ID};
Cursor cur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, str, null,
null, null);
int count = cur.getCount();
cur.close();
Toast.makeText(MainActivity.this, String.format("发现%s条", count), Toast.LENGTH_SHORT)
.show();
}
private void readContactDenied() {
Toast.makeText(MainActivity.this, "Contact Denied", Toast.LENGTH_SHORT)
.show();
}
}










