Fix permissions request for media provider content URIs
We need to request the external storage permission to access these PiperOrigin-RevId: 454160546
This commit is contained in:
parent
d6a6b44715
commit
b5f53e7710
@ -55,6 +55,7 @@ import android.os.Handler;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
import android.provider.MediaStore;
|
||||||
import android.security.NetworkSecurityPolicy;
|
import android.security.NetworkSecurityPolicy;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@ -219,8 +220,8 @@ public final class Util {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (Uri uri : uris) {
|
for (Uri uri : uris) {
|
||||||
if (isLocalFileUri(uri)) {
|
if (maybeRequestReadExternalStoragePermission(activity, uri)) {
|
||||||
return requestExternalStoragePermission(activity);
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -245,18 +246,39 @@ public final class Util {
|
|||||||
if (mediaItem.localConfiguration == null) {
|
if (mediaItem.localConfiguration == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isLocalFileUri(mediaItem.localConfiguration.uri)) {
|
if (maybeRequestReadExternalStoragePermission(activity, mediaItem.localConfiguration.uri)) {
|
||||||
return requestExternalStoragePermission(activity);
|
return true;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < mediaItem.localConfiguration.subtitleConfigurations.size(); i++) {
|
List<MediaItem.SubtitleConfiguration> subtitleConfigs =
|
||||||
if (isLocalFileUri(mediaItem.localConfiguration.subtitleConfigurations.get(i).uri)) {
|
mediaItem.localConfiguration.subtitleConfigurations;
|
||||||
return requestExternalStoragePermission(activity);
|
for (int i = 0; i < subtitleConfigs.size(); i++) {
|
||||||
|
if (maybeRequestReadExternalStoragePermission(activity, subtitleConfigs.get(i).uri)) {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean maybeRequestReadExternalStoragePermission(Activity activity, Uri uri) {
|
||||||
|
return Util.SDK_INT >= 23 && (isLocalFileUri(uri) || isMediaStoreExternalContentUri(uri))
|
||||||
|
? requestExternalStoragePermission(activity)
|
||||||
|
: false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isMediaStoreExternalContentUri(Uri uri) {
|
||||||
|
if (!"content".equals(uri.getScheme()) || !MediaStore.AUTHORITY.equals(uri.getAuthority())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
List<String> pathSegments = uri.getPathSegments();
|
||||||
|
if (pathSegments.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
String firstPathSegment = pathSegments.get(0);
|
||||||
|
return MediaStore.VOLUME_EXTERNAL.equals(firstPathSegment)
|
||||||
|
|| MediaStore.VOLUME_EXTERNAL_PRIMARY.equals(firstPathSegment);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether it may be possible to load the URIs of the given media items based on the
|
* Returns whether it may be possible to load the URIs of the given media items based on the
|
||||||
* network security policy's cleartext traffic permissions.
|
* network security policy's cleartext traffic permissions.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user