本文主要是记录一些零碎的东西
6.0权限检测,放到baseActivity里咯
/**
* 检查 Camera 权限
*/
public void checkOrRequestCameraPermission(int requestCode)
{
this.checkOrRequestPermission(requestCode,
Manifest.permission.CAMERA);
}
/**
* 检查录制权限
*/
public void checkOrRequestRecordPermission(int requestCode)
{
this.checkOrRequestPermission(requestCode,
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO);
}
/**
* 检查 read/write storage 权限
*/
public void checkOrRequestStoragePermission(int requestCode)
{
this.checkOrRequestPermission(requestCode,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
/**
* 检查 拍照 权限 ( camera + external storage )
*/
public void checkOrRequestTakePicturePermission(int requestCode)
{
this.checkOrRequestPermission(requestCode,
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
/**
* 检查并请求权限
* @param requestCode request code
* @param permissions 权限
*/
public void checkOrRequestPermission(int requestCode, String... permissions)
{
if (permissions == null || Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
this.onPermissionGranted(requestCode);
return;
}
int deniedNum = 0;
String [] deniedPermissions = new String[permissions.length];
for (String per : permissions) {
if (ActivityCompat.checkSelfPermission(this, per) != PackageManager.PERMISSION_GRANTED) {
deniedPermissions[deniedNum] = per;
deniedNum += 1;
}
}
if (deniedNum == 0) {
this.onPermissionGranted(requestCode);
}
else {
ActivityCompat.requestPermissions(this,
Arrays.copyOfRange(deniedPermissions, 0, deniedNum), requestCode);
}
}
/**
* 如果这个请求的所有权限都被 granted 了, 就会回调这个方法
* @param requestCode request code
*/
public void onPermissionGranted(int requestCode)
{
//
}
/**
* 如果请求的所有权限中任何一个被 denied 了, 都会回调这个方法,
* 并返回被 denied 掉的权限数组
* @param requestCode request code
* @param deniedPermissions denied 的权限
*/
public void onPermissionDenied(int requestCode, @NonNull String [] deniedPermissions)
{
//
}
/**
* 如果一个权限被设置为 Never Ask Again, 则会回调此方法
* @param requestCode request code
* @param neverAskPermissions 在这次请求中的所有被 never ask again 的权限
*/
public void onPermissionNeverAskAgain(int requestCode, @NonNull String [] neverAskPermissions)
{
//
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
int deniedNum = 0;
String [] deniedPermissions = new String[permissions.length];
int neverAskNum = 0;
String [] neverAskPermissions = new String[permissions.length];
for (int i = 0; i < permissions.length; ++i) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) {
neverAskPermissions[neverAskNum] = permissions[i];
neverAskNum += 1;
}
else {
deniedPermissions[deniedNum] = permissions[i];
deniedNum += 1;
}
}
}
if (neverAskNum != 0) {
this.onPermissionNeverAskAgain(requestCode,
Arrays.copyOfRange(neverAskPermissions, 0, neverAskNum));
}
else if (deniedNum != 0) {
this.onPermissionDenied(requestCode,
Arrays.copyOfRange(deniedPermissions, 0, deniedNum));
}
else {
this.onPermissionGranted(requestCode);
}
}
使用
checkOrRequestStoragePermission(REQ_CREATE_APP_DIR);
重写那三个方法,做相应处理
@Override
public void onPermissionGranted(int requestCode)
@Override
public void onPermissionDenied(int requestCode, @NonNull String[] deniedPermissions)
{
alertPermissionSetting(requestCode,deniedPermissions);
}
@Override
public void onPermissionNeverAskAgain(int requestCode, @NonNull String[] neverAskPermissions)
{
alertPermissionSetting(requestCode,neverAskPermissions);
}
private void alertPermissionSetting(int requestCode, String[] permissions) {
switch (requestCode) {
case REQ_CREATE_APP_DIR:
msg = String.format(getString(R.string.permission),getString(R.string.permission_file));
break;
}
showAlertDialog(msg);
}
private AlertDialog mAlertDialog;
private void showAlertDialog(String message) {
if (mAlertDialog == null || !mAlertDialog.isShowing()) {
mAlertDialog = new AlertDialog.Builder(this)
.setMessage(String.format(getString(R.string.permission_alert),message))
.setPositiveButton("设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, ActionCodeUtil.PERMISSION_REQUEST_CODE);
return;
}
})
// .setNegativeButton("取消",null)
.create();
// mAlertDialog.setCanceledOnTouchOutside(false);// 设置点击屏幕Dialog不消失
mAlertDialog.setCancelable(false);
mAlertDialog.show();
}
}