在启动页onCreate()使用方法applyForPermissions();
private String[] permissions;
//权限申请
private void applyForPermissions(){
// android 6.0以上,包括6.0操作图库属于危险权限,需要用户自己点开
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.RECORD_AUDIO,
Manifest.permission.CAMERA};
mPermissionList = new ArrayList<>();
mPermissionList.clear();
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);
}
}
if (mPermissionList.isEmpty()) {//未授予的权限为空,表示都授予了
startMainActivity();
} else {//请求权限方法
String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组
ActivityCompat.requestPermissions(this, permissions, 1);
return;
}
}else { //小于6.0
startMainActivity();
}
}
//Android 6.0以上权限库中对应请求的打开或者拒绝的回调
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 1){
int i;
for (i = 0; i < grantResults.length;i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
//判断是否勾选禁止后不再询问
boolean showRequestPermission = ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i]);
if (showRequestPermission) {
applyForPermissions();
} else {
showDialogTipUserGoToAppSettting();
}
break;
} else {
continue;
}
}
if(i == grantResults.length){
startMainActivity();
}
}
}
//假如没有打开权限则提示用户去应用设置界面手动开启权限
private void showDialogTipUserGoToAppSettting() {
dialog = new AlertDialog.Builder(this)
.setMessage("请在应用设置-权限中赋予该有声相机访问存储和麦克风的权限,否则应用将无法正常工作!")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 跳转到应用设置界面
goToAppSetting();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
}).create();
dialog.show();
}
// 跳转到当前设备的设置界面
private void goToAppSetting() {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, 123);
}
//当前页面的返回回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 123) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查该权限是否已经获取
int i;
for (i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
showDialogTipUserGoToAppSettting();
break;
}else {
continue;
}
}
if(i == permissions.length)
{
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
startMainActivity();
}
}
}
}