Catch strange SecurityException.

No idea how people manage to hit this, but it seems to be a thing on Samsung phones.

Sample stacktrace:
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=12655, uid=10269 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
	at android.os.Parcel.readException(Parcel.java:1620)
	at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
	at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
	at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
	at android.content.ContentResolver.query(ContentResolver.java:502)
	at android.content.ContentResolver.query(ContentResolver.java:445)
	at ch.blinkenlights.android.vanilla.MediaUtils.getAndroidMediaIds(MediaUtils.java:591)
	at ch.blinkenlights.android.vanilla.PlaybackService.scrobbleBroadcast(PlaybackService.java:1108)
	at ch.blinkenlights.android.vanilla.PlaybackService.broadcastChange(PlaybackService.java:1064)
	at ch.blinkenlights.android.vanilla.PlaybackService.handleMessage(PlaybackService.java:1543)
	at android.os.Handler.dispatchMessage(Handler.java:98)
	at android.os.Looper.loop(Looper.java:148)
	at android.os.HandlerThread.run(HandlerThread.java:61)

Note that this happens WHILE we play a song - so claiming to not have READ_EXTERNAL_STORAGE privileges seems to be - strange.
This commit is contained in:
Adrian Ulrich 2017-04-22 18:37:35 +02:00
parent df49dd1a49
commit f04a2f1186

View File

@ -588,12 +588,16 @@ public class MediaUtils {
public static long[] getAndroidMediaIds(Context context, Song song) {
long[] result = { -1, -1, -1 };
String[] projection = new String[]{ MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ALBUM_ID, MediaStore.Audio.Media.ARTIST_ID };
Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, MediaStore.Audio.Media.DATA+"=?", new String[] { song.path }, null);
if (cursor.moveToFirst()) {
for (int i=0; i<result.length; i++)
result[i] = cursor.getLong(i);
try {
Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, MediaStore.Audio.Media.DATA+"=?", new String[] { song.path }, null);
if (cursor.moveToFirst()) {
for (int i=0; i<result.length; i++)
result[i] = cursor.getLong(i);
}
cursor.close();
} catch (SecurityException e) {
Log.e("VanillaMusic", "Wowies: No permission to read EXTERNAL_CONTENT_URI for song "+song.path+": "+e);
}
cursor.close();
return result;
}