关于Android权限申请问题
一、Android6.0一下(即API23以下)
直接在清单文件里面声明即可。
二、Android6.0以上
需要动态申请权限:
-
检查是否有需要的权限:
- 有则返回true
ContextCompat.checkSelfPermission(@NonNull Context context, @NonNull String permission);
-
申请权限:
- 在Activity中申请权限:
ActivityCompat.requestPermission();
- 在Fragment中申请权限:
this.requestPermissions();
-
回调:
在申请权限之后会回调一个方法(Fragment里面申请权限必须要用第二个,不然不会回调!!!):
//grantResults是申请权限之后返回的结果,分别为:PackageManager.PERMISSION_GRANTED——>允许、PackageManager.PERMISSION_DENIED——>拒绝
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {}
-
代码:
- 单个权限申请:
public static void getPermission(Context context, String mPermission, int requestCode) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ContextCompat.checkSelfPermission(context, mPermission) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions((Activity) context, new String[]{mPermission}, requestCode); } } }
- 多个权限申请:
public boolean getPermissions(Context context, ArrayList<String> mPermissionList, int requestCode) { ArrayList<String> mPermissions = new ArrayList<>(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { for (int i = 0; i < mPermissionList.size(); i++) { if (ContextCompat.checkSelfPermission(context, mPermissionList.get(i)) != PackageManager.PERMISSION_GRANTED) { mPermissions.add(mPermissionList.get(i)); } } if (mPermissions.size() != 0) { String[] permissions = mPermissions.toArray(new String[0]); requestPermissions(permissions, requestCode); return false; } } return true; }