@@ -121,6 +121,7 @@ static void checkMediaLocationPermission(@NonNull Context context, @NonNull List
121
121
for (String permission : requestPermissions ) {
122
122
if (PermissionUtils .equalsPermission (permission , Permission .ACCESS_MEDIA_LOCATION )
123
123
|| PermissionUtils .equalsPermission (permission , Permission .READ_MEDIA_IMAGES )
124
+ || PermissionUtils .equalsPermission (permission , Permission .READ_MEDIA_VIDEO )
124
125
|| PermissionUtils .equalsPermission (permission , Permission .READ_EXTERNAL_STORAGE )
125
126
|| PermissionUtils .equalsPermission (permission , Permission .WRITE_EXTERNAL_STORAGE )
126
127
|| PermissionUtils .equalsPermission (permission , Permission .MANAGE_EXTERNAL_STORAGE )) {
@@ -134,9 +135,10 @@ static void checkMediaLocationPermission(@NonNull Context context, @NonNull List
134
135
135
136
if (AndroidVersion .getTargetSdkVersionCode (context ) >= AndroidVersion .ANDROID_13 ) {
136
137
if (!PermissionUtils .containsPermission (requestPermissions , Permission .READ_MEDIA_IMAGES ) &&
138
+ !PermissionUtils .containsPermission (requestPermissions , Permission .READ_MEDIA_VIDEO ) &&
137
139
!PermissionUtils .containsPermission (requestPermissions , Permission .MANAGE_EXTERNAL_STORAGE )) {
138
- // 你需要在外层手动添加 READ_MEDIA_IMAGES 或者 MANAGE_EXTERNAL_STORAGE 才可以申请 ACCESS_MEDIA_LOCATION 权限
139
- throw new IllegalArgumentException ("You must add " + Permission .READ_MEDIA_IMAGES + " or " +
140
+ // 你需要在外层手动添加 READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、 MANAGE_EXTERNAL_STORAGE 任一权限才可以申请 ACCESS_MEDIA_LOCATION 权限
141
+ throw new IllegalArgumentException ("You must add " + Permission .READ_MEDIA_IMAGES + " or " + Permission . READ_MEDIA_VIDEO + " or " +
140
142
Permission .MANAGE_EXTERNAL_STORAGE + " rights to apply for " + Permission .ACCESS_MEDIA_LOCATION + " rights" );
141
143
}
142
144
} else {
@@ -173,13 +175,39 @@ static void checkStoragePermission(@NonNull Context context, @NonNull List<Strin
173
175
" instead of " + Permission .READ_EXTERNAL_STORAGE );
174
176
}
175
177
176
- // 如果申请的是 Android 13 读取媒体权限,则绕过本次检查
177
178
if (PermissionUtils .containsPermission (requestPermissions , Permission .READ_MEDIA_IMAGES ) ||
178
179
PermissionUtils .containsPermission (requestPermissions , Permission .READ_MEDIA_VIDEO ) ||
179
180
PermissionUtils .containsPermission (requestPermissions , Permission .READ_MEDIA_AUDIO )) {
181
+
182
+ if (PermissionUtils .containsPermission (requestPermissions , Permission .READ_EXTERNAL_STORAGE ) ||
183
+ PermissionUtils .containsPermission (requestPermissions , Permission .WRITE_EXTERNAL_STORAGE )) {
184
+ // 检测是否有旧版的存储权限,有的话直接抛出异常,请不要自己动态申请这两个权限
185
+ // 框架会在 Android 13 以下的版本上自动添加并申请这两个权限
186
+ throw new IllegalArgumentException ("If you have applied for media permissions, " +
187
+ "do not apply for the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions" );
188
+ }
189
+
190
+ if (PermissionUtils .containsPermission (requestPermissions , Permission .MANAGE_EXTERNAL_STORAGE )) {
191
+ // 因为 MANAGE_EXTERNAL_STORAGE 权限范围很大,有了它就可以读取媒体文件,不需要再叠加申请媒体权限
192
+ throw new IllegalArgumentException ("Because the MANAGE_EXTERNAL_STORAGE permission range is very large, "
193
+ + "you can read media files with it, and there is no need to apply for additional media permissions." );
194
+ }
195
+
196
+ // 到此结束,不需要往下走是否有分区存储的判断
180
197
return ;
181
198
}
182
199
200
+ if (PermissionUtils .containsPermission (requestPermissions , Permission .MANAGE_EXTERNAL_STORAGE )) {
201
+
202
+ if (PermissionUtils .containsPermission (requestPermissions , Permission .READ_EXTERNAL_STORAGE ) ||
203
+ PermissionUtils .containsPermission (requestPermissions , Permission .WRITE_EXTERNAL_STORAGE )) {
204
+ // 检测是否有旧版的存储权限,有的话直接抛出异常,请不要自己动态申请这两个权限
205
+ // 框架会在 Android 10 以下的版本上自动添加并申请这两个权限
206
+ throw new IllegalArgumentException ("If you have applied for MANAGE_EXTERNAL_STORAGE permissions, " +
207
+ "do not apply for the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions" );
208
+ }
209
+ }
210
+
183
211
// 如果申请的是 Android 10 获取媒体位置权限,则绕过本次检查
184
212
if (PermissionUtils .containsPermission (requestPermissions , Permission .ACCESS_MEDIA_LOCATION )) {
185
213
return ;
@@ -683,18 +711,15 @@ static void optimizeDeprecatedPermission(@NonNull List<String> requestPermission
683
711
// 如果本次申请包含了 Android 11 存储权限
684
712
if (PermissionUtils .containsPermission (requestPermissions , Permission .MANAGE_EXTERNAL_STORAGE )) {
685
713
686
- if (PermissionUtils .containsPermission (requestPermissions , Permission .READ_EXTERNAL_STORAGE ) ||
687
- PermissionUtils .containsPermission (requestPermissions , Permission .WRITE_EXTERNAL_STORAGE )) {
688
- // 检测是否有旧版的存储权限,有的话直接抛出异常,请不要自己动态申请这两个权限
689
- // 框架会在 Android 10 以下的版本上自动添加并申请这两个权限
690
- throw new IllegalArgumentException ("If you have applied for MANAGE_EXTERNAL_STORAGE permissions, " +
691
- "do not apply for the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions" );
692
- }
693
-
694
714
if (!AndroidVersion .isAndroid11 ()) {
695
715
// 自动添加旧版的存储权限,因为旧版的系统不支持申请新版的存储权限
696
- requestPermissions .add (Permission .READ_EXTERNAL_STORAGE );
697
- requestPermissions .add (Permission .WRITE_EXTERNAL_STORAGE );
716
+ if (!PermissionUtils .containsPermission (requestPermissions , Permission .READ_EXTERNAL_STORAGE )) {
717
+ requestPermissions .add (Permission .READ_EXTERNAL_STORAGE );
718
+ }
719
+
720
+ if (!PermissionUtils .containsPermission (requestPermissions , Permission .WRITE_EXTERNAL_STORAGE )) {
721
+ requestPermissions .add (Permission .WRITE_EXTERNAL_STORAGE );
722
+ }
698
723
}
699
724
}
700
725
0 commit comments