import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
public abstract class BasePermissionActivity extends BaseActivity {
private static final String TAG = "BasePermissionActivity";
private static final int REQUEST_PERMISSION = 101;
private String mPermission;
/**
* 判断是否有该权限,如果没有,就去请求,并回调
* @param permission 需要使用的权限
* @return 是否有该权限
*/
protected boolean hasPermission(String permission) {
if (ActivityCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
mPermission = permission;
ActivityCompat.requestPermissions(this, new String[]{permission}, REQUEST_PERMISSION);
return false;
}
}
/**
* 获取到了权限
*
* @param permission
*/
abstract void onGetPermission(String permission);
/**
* 权限被拒绝
* @param permission
*/
abstract void onDenyPermission(String permission);
/**
* 不在询问
* @param permission
*/
abstract void onNeverAsk(String permission);
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
onGetPermission(mPermission);
} else if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0])) {//点击了不再询问
onNeverAsk(mPermission);
} else {
onDenyPermission(mPermission);
}
}
}
}
直接在需要判断权限的activity继承上面的BasePermissionActivity,而BasePermissionActivity可以继承自你自己的BaseActivity,不影响你自己其他功能的使用,使用的时候:
public void askCamera(View view) {
if (hasPermission(Manifest.permission.CAMERA)) {
Toast.makeText(this, "有相机手机权限", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onGetPermission(String permission) {
Toast.makeText(this, permission + "权限申请成功", Toast.LENGTH_SHORT).show();
}
@Override
protected void onDenyPermission(String permission) {
Toast.makeText(this, permission + "权限被拒绝", Toast.LENGTH_SHORT).show();
}
@Override
protected void onNeverAsk(String permission) {
Toast.makeText(this, permission + "权限被拒绝,并且不再询问", Toast.LENGTH_SHORT).show();
}