Android动态权限请求:
public static boolean isPermissions = false;//是否获得全部权限。
public static String[] permissions = {android.Manifest.permission.INTERNET,
android.Manifest.permission.READ_PHONE_STATE,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.ACCESS_NETWORK_STATE,
android.Manifest.permission.CHANGE_NETWORK_STATE,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.READ_EXTERNAL_STORAGE//,
//android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE
};//所需要申请的的权限列表
public static void CheckPermissions()
{
// 1. 申请权限
// 首先判断 SDK 版本,是否大于等于 6.0
if (Build.VERSION.SDK_INT >= 23) {
int id = 0;
int checkCallPhonePermission = 0;
List<String> notGrantedList = new ArrayList<>();
for(String permission: permissions) {
// 检查是否已授权
checkCallPhonePermission = app.checkSelfPermission(permission);
if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
notGrantedList.add(permission);
}
}
if(notGrantedList.size() > 0){
String[] notGrantedArray = new String[notGrantedList.size()];
notGrantedList.toArray(notGrantedArray);
// 请求用户授权
app.requestPermissions(notGrantedArray, id);
}else{
// 如果不需要用户授权,直接执行后面的代码
//createMethod();
if(notGrantedList.size() <= 0)
{
isPermissions = true;
}
}
}else{
// 如果SDK小于6.0,无需动态申请权限
//createMethod();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == 0){
int grantCount = 0;
for(int grant : grantResults){
if(grant == PackageManager.PERMISSION_GRANTED){
grantCount ++;
}
}
if(grantCount == grantResults.length){
// 权限获取成功,执行后面的代码
//createMethod();
isPermissions = true;
}else{
// 权限获取失败 提示用户
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog alertDialog = new AlertDialog.Builder(app).setTitle("温馨提示")
.setMessage("应用需要相应的权限,否则无法正常使用,请前往应用设置进行授权或返回上一页面。")
.setPositiveButton("前往设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
intent.setData(Uri.fromParts("package", getPackageName(), null));
startActivity(intent);
}
}).setNegativeButton("返回", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// isCreated = false;
// Intent intent = null;
// try {
// intent = new Intent(app, Class.forName(packageName+".MainActivity"));
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// intent = currentIntent;
// }
// startActivity(intent);
app.finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
}).setCancelable(false).create();
alertDialog.show();
}
});
}
}
}
以上代码为启动时请求权限。
如果在游戏中需要验证权限,就获取isPermissions,如果为true,则权限全部验证通过,如果为false,则至少有一项没有通过。
如果不想通过这个参数来判断,若要重新验证权限是否通过,则再用如下代码判断。:
public static boolean CheckPermissionsByGame()
{
if (Build.VERSION.SDK_INT >= 23)
{
int id = 0;
int checkCallPhonePermission = 0;
List<String> notGrantedList = new ArrayList<>();
for (String permission : permissions)
{
// 检查是否已授权
checkCallPhonePermission = app.checkSelfPermission(permission);
if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED)
{
notGrantedList.add(permission);
}
}
if (notGrantedList.size() > 0)
{
String[] notGrantedArray = new String[notGrantedList.size()];
notGrantedList.toArray(notGrantedArray);
return false;
// 请求用户授权
//requestPermissions(notGrantedArray, id);
}
else
{
// 如果不需要用户授权,直接执行后面的代码
//createMethod();
if (notGrantedList.size() <= 0)
{
isPermissions = true;
}
}
}
else {
// 如果SDK小于6.0,无需动态申请权限
//createMethod();
}
return true;
}