• Android动态权限请求


    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;
    }
  • 相关阅读:
    一千行 MySQL 学习笔记
    linux学习(二)
    linux学习(二)
    内联元素
    内联因素1.默认内容撑开盒子大小
    定位absolute使内联支持宽高(块属性变为内联,内容默认撑开)margin auto 失效
    over
    float浮动问题:会造成父级元素高度坍塌;
    float的元素脱离文档流,但不完全脱离,只是提升了半层;
    float了的元素和内联元素不支持margin:auto
  • 原文地址:https://www.cnblogs.com/vsirWaiter/p/16384991.html
Copyright © 2020-2023  润新知