From f04a2f1186ec81532858f50eb9fb4846fd9039dd Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Sat, 22 Apr 2017 18:37:35 +0200 Subject: [PATCH] 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. --- .../blinkenlights/android/vanilla/MediaUtils.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/ch/blinkenlights/android/vanilla/MediaUtils.java b/src/ch/blinkenlights/android/vanilla/MediaUtils.java index bb1ac58f..a99809e6 100644 --- a/src/ch/blinkenlights/android/vanilla/MediaUtils.java +++ b/src/ch/blinkenlights/android/vanilla/MediaUtils.java @@ -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