android 6.0以上添加动态权限,多条权限一起请求

因为android 6.0以上出于用户安全考虑,大部分涉及硬件环境的权限需要动态获取。

简单讲述获取多条动态权限并设置监听:

/**
 * Created by Administrator on 2019/1/21.
 */

public class Premissions {

    public static int permissioncpde=1;//标识
    public static String[] per=new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE};

    public static void showTakePermission(Activity activity, Context context) {
//        判断手机版本,如果低于6.0 则不用申请权限,直接拍照
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//7.0及以上
            ActivityCompat.requestPermissions(activity,per, permissioncpde);//获取多条权限
        }else{
        }

    }

    //判断是否有指定权限
    public static boolean isPermission(Activity activity, Context context,String perValue) {
//        判断手机版本,如果低于6.0 则不用申请权限,直接拍照
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//7.0及以上
            if((ContextCompat.checkSelfPermission(context, perValue) != PackageManager.PERMISSION_GRANTED)) {
                return false;
            }else {
                return true;
            }
        }else{
            return true;
        }
    }
}

通过activity的onRequestPermissionsResult 监听权限是否通过

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
   super.onRequestPermissionsResult(requestCode, permissions, grantResults);
   if(requestCode==1){
      for (int i = 0; i < permissions.length; i++) {
         if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
            if (i == 0){
            }
         } else {
            Toast.makeText(MainActivity.this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show();
         }
      }
   }
}

在activity 中调用 

//动态获取权限
Premissions.showTakePermission(this,this);

需要注意在

AndroidManifest 中任然要写权限  否则部分手机会报错

你可能感兴趣的:(android)