1.最近维护的项目中用到了 weiXinRecorded图片选择,致使项目targetSdkVersion不能升级到23及以 上android
2.在Android 9.0出来以后,对存储及拍照权限,更改成了:容许,询问,拒绝,比以前的容许,拒绝,多了一个询问的状态,就必需要用到动态请求权限, 相矛盾的是 动态权限是api 23 android 6.0之后的特性,项目为22及如下api
3.结局办法:谷歌官方针对,这一特殊状况,也作了相应的解决方案: 在app moudle 的build.gradle 中添加: 注意:是V4包中app
implementation 'com.android.support:support-v4:support-core-utils-25.1.0'
gradle
implementation 'com.android.support:support-v4:support-compat-25.1.0'
ui
在对应类中须要使用的地方 调用(如点击事件,跳转页面以前等)spa
获取相应权限code
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);
复制代码
}图片