MediaStore.Audio.Media.getContentUriForPath() returns unexpected content
MediaStore.Audio.getContentUriForPath() returns an uri to internal storage if anything but /mnt/sdcard/ is sent in. This fix checks if there is an additional sdcard (normally called ext_card) or usb mass storage attached to the device and then returns an uri to the external db. The extra sdcard name and the usb mass storage name info is read from the system environment variable SECONDARY_STORAGE so if a customer chooses to change the name this will work as expected. Change-Id: Ib78bca929fe382d4770df895149a0132f0e56994
This commit is contained in:
committed by
Gerrit Code Review
parent
7c2920625e
commit
66eb589957
@@ -1324,6 +1324,18 @@ public final class MediaStore {
|
||||
}
|
||||
|
||||
public static final class Media implements AudioColumns {
|
||||
|
||||
private static final String[] EXTERNAL_PATHS;
|
||||
|
||||
static {
|
||||
String secondary_storage = System.getenv("SECONDARY_STORAGE");
|
||||
if (secondary_storage != null) {
|
||||
EXTERNAL_PATHS = secondary_storage.split(":");
|
||||
} else {
|
||||
EXTERNAL_PATHS = new String[0];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the content:// style URI for the audio media table on the
|
||||
* given volume.
|
||||
@@ -1337,6 +1349,12 @@ public final class MediaStore {
|
||||
}
|
||||
|
||||
public static Uri getContentUriForPath(String path) {
|
||||
for (String ep : EXTERNAL_PATHS) {
|
||||
if (path.startsWith(ep)) {
|
||||
return EXTERNAL_CONTENT_URI;
|
||||
}
|
||||
}
|
||||
|
||||
return (path.startsWith(Environment.getExternalStorageDirectory().getPath()) ?
|
||||
EXTERNAL_CONTENT_URI : INTERNAL_CONTENT_URI);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user