-
1.最近维护的项目中用到了 weiXinRecorded图片选择,导致项目targetSdkVersion不能升级到23及以 上
-
2.在Android 9.0出来之后,对存储及拍照权限,更改为了:允许,询问,拒绝,比之前的允许,拒绝,多了一个询问的状态,就必须要用到动态请求权限, 相矛盾的是 动态权限是api 23 android 6.0以后的特性,项目为22及以下
-
3.结局办法:谷歌官方针对,这一特殊情况,也做了相应的解决方案: 在app moudle 的build.gradle 中添加: 注意:是V4包中
implementation 'com.android.support:support-v4:support-core-utils-25.1.0'
implementation 'com.android.support:support-v4:support-compat-25.1.0'
-
在对应类中需要使用的地方 调用(如点击事件,跳转页面之前等)
-
获取相应权限
private void getPermissions() {
int permission = PermissionChecker.checkSelfPermission(context, android.Manifest.permission.WRITE_EXTERNAL_STORAGE); int cemerms = PermissionChecker.checkSelfPermission(context, android.Manifest.permission.CAMERA); //0成功 -1失败 if (permission == PermissionChecker.PERMISSION_GRANTED && cemerms == PermissionChecker.PERMISSION_GRANTED) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager .PERMISSION_GRANTED || checkSelfPermission(getActivity(), Manifest.permission.RECORD_AUDIO) != PackageManager .PERMISSION_GRANTED || checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager .PERMISSION_GRANTED || checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager .PERMISSION_GRANTED) { //不具有获取权限,需要进行权限申请 ActivityCompat.requestPermissions(getActivity(), new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE}, GET_PERMISSION_REQUEST); } else { startActivity(new Intent(getActivity(), LoginAcitivty.class)); } } else { startActivity(new Intent(getActivity(), LoginAcitivty.class)); } }else{ //写个弹出框,让用户去手动开启权限 toSelfSetting(MyApplication.getContext()); } <!--跳往应用设置页面--> public static void toSelfSetting(Context context) { Intent mIntent = new Intent(); mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= 9) { mIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); mIntent.setData(Uri.fromParts("package", context.getPackageName(), null)); } else if (Build.VERSION.SDK_INT <= 8) { mIntent.setAction(Intent.ACTION_VIEW); mIntent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails"); mIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName()); } context.startActivity(mIntent);
}