From ea74e99f89f4344e171743dcf884654b501737f0 Mon Sep 17 00:00:00 2001 From: steve Date: Sun, 8 Oct 2017 17:40:40 -0400 Subject: [PATCH] Try to get file path from DATA column of Uri --- .../gramophone/helper/MusicPlayerRemote.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java index c43dc5b2..6a4bdeea 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/MusicPlayerRemote.java @@ -8,6 +8,7 @@ import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.content.ServiceConnection; +import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Environment; @@ -16,6 +17,7 @@ import android.provider.DocumentsContract; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.util.Log; import android.widget.Toast; import com.kabouzeid.gramophone.R; @@ -413,6 +415,11 @@ public class MusicPlayerRemote { if (uri.getAuthority() != null && uri.getAuthority().equals("com.android.externalstorage.documents")) { songFile = new File(Environment.getExternalStorageDirectory(), uri.getPath().split(":", 2)[1]); } + if (songFile == null) { + String path = getFilePathFromUri(musicService, uri); + if (path != null) + songFile = new File(path); + } if (songFile == null && uri.getPath() != null) { songFile = new File(uri.getPath()); } @@ -431,6 +438,30 @@ public class MusicPlayerRemote { } } } + @Nullable + private static String getFilePathFromUri(Context context, Uri uri) + { + Cursor cursor = null; + final String column = "_data"; + final String[] projection = { + column + }; + + try { + cursor = context.getContentResolver().query(uri, projection, null, null, + null); + if (cursor != null && cursor.moveToFirst()) { + final int column_index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(column_index); + } + } catch (Exception e) { + Log.e(TAG, e.getMessage()); + } finally { + if (cursor != null) + cursor.close(); + } + return null; + } @TargetApi(Build.VERSION_CODES.KITKAT) private static String getSongIdFromMediaProvider(Uri uri) {