Skip to content

Commit ae62e6f

Browse files
committed
修复在 Android 11 及以下的设备启动相机后无法保存的问题
1 parent a57c6bf commit ae62e6f

4 files changed

Lines changed: 23 additions & 2 deletions

File tree

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
<!-- 读取外部存储权限 -->
1616
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
17+
<!-- 写入外部存储权限(注意:这个权限在 targetSdk >= Android 11 并且 Android 11 及以上的设备上面不起作用,请适配分区存储特性代替权限申请)-->
18+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="31" tools:ignore="ScopedStorage" />
1719

1820
<!-- 拍照权限 -->
1921
<uses-permission android:name="android.permission.CAMERA" />

app/src/main/java/com/hjq/demo/ui/activity/common/CameraActivity.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@
1818
import com.hjq.demo.permission.PermissionInterceptor;
1919
import com.hjq.permissions.XXPermissions;
2020
import com.hjq.permissions.permission.PermissionLists;
21+
import com.hjq.permissions.permission.base.IPermission;
2122
import java.io.File;
2223
import java.text.SimpleDateFormat;
24+
import java.util.ArrayList;
2325
import java.util.Date;
26+
import java.util.List;
2427
import java.util.Locale;
2528

2629
/**
@@ -42,10 +45,18 @@ public static void start(@NonNull BaseActivity activity, @Nullable OnCameraListe
4245

4346
@Log
4447
public static void start(@NonNull BaseActivity activity, boolean video, @Nullable OnCameraListener listener) {
48+
List<IPermission> permissions = new ArrayList<>();
49+
permissions.add(PermissionLists.getCameraPermission());
50+
if (!AndroidVersion.isAndroid11()) {
51+
permissions.add(PermissionLists.getReadExternalStoragePermission());
52+
permissions.add(PermissionLists.getWriteExternalStoragePermission());
53+
}
4554
XXPermissions.with(activity)
46-
.permission(PermissionLists.getCameraPermission())
55+
.permissions(permissions)
4756
.interceptor(new PermissionInterceptor())
4857
.description(new PermissionDescription())
58+
// 设置不触发错误检测机制
59+
.unchecked()
4960
.request((grantedList, deniedList) -> {
5061
boolean allGranted = deniedList.isEmpty();
5162
if (!allGranted) {
@@ -110,8 +121,14 @@ protected void initData() {
110121
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
111122
}
112123

124+
List<IPermission> permissions = new ArrayList<>();
125+
permissions.add(PermissionLists.getCameraPermission());
126+
if (!AndroidVersion.isAndroid11()) {
127+
permissions.add(PermissionLists.getReadExternalStoragePermission());
128+
permissions.add(PermissionLists.getWriteExternalStoragePermission());
129+
}
113130
if (intent.resolveActivity(getPackageManager()) == null ||
114-
!XXPermissions.isGrantedPermission(this, PermissionLists.getCameraPermission())) {
131+
!XXPermissions.isGrantedPermissions(this, permissions)) {
115132
setResult(RESULT_ERROR, new Intent().putExtra(INTENT_KEY_OUT_ERROR, getString(R.string.camera_launch_fail)));
116133
finish();
117134
return;

app/src/main/java/com/hjq/demo/ui/activity/common/ImageSelectActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ public static void start(@NonNull BaseActivity activity, int maxSelect, @Nullabl
113113
.permission(PermissionLists.getReadExternalStoragePermission())
114114
.interceptor(new PermissionInterceptor())
115115
.description(new PermissionDescription())
116+
// 设置不触发错误检测机制
116117
.unchecked()
117118
.request((grantedList, deniedList) -> {
118119
boolean allGranted = deniedList.isEmpty();

app/src/main/java/com/hjq/demo/ui/activity/common/VideoSelectActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ public static void start(@NonNull BaseActivity activity, int maxSelect, @Nullabl
119119
.permission(PermissionLists.getReadExternalStoragePermission())
120120
.interceptor(new PermissionInterceptor())
121121
.description(new PermissionDescription())
122+
// 设置不触发错误检测机制
122123
.unchecked()
123124
.request((grantedList, deniedList) -> {
124125
boolean allGranted = deniedList.isEmpty();

0 commit comments

Comments
 (0)