Android 从文件路径检索ContentProvider条目

Android 从文件路径检索ContentProvider条目,android,android-contentprovider,mediastore,Android,Android Contentprovider,Mediastore,我有一个非常特殊的需求,需要从几个不同的用例中的歌曲中检索艺术家和曲目。通常我可以很容易地从mp3 uri(scheme:内容://)查询MediaStore,但有时我会收到一个文件路径(scheme:文件://)。 我偶然发现了StackOverflow上的这篇文章: 不幸的是,它看起来对我不起作用。我肯定在什么地方做错了什么,但我不知道在哪里。 这是我使用的代码,我给它的文件路径在执行之前经过验证 下面是一段代码: private void getTrackFromFilePath

我有一个非常特殊的需求,需要从几个不同的用例中的歌曲中检索艺术家和曲目。通常我可以很容易地从mp3 uri(scheme:
内容://
)查询MediaStore,但有时我会收到一个文件路径(scheme:
文件://
)。 我偶然发现了StackOverflow上的这篇文章:

不幸的是,它看起来对我不起作用。我肯定在什么地方做错了什么,但我不知道在哪里。 这是我使用的代码,我给它的文件路径在执行之前经过验证

下面是一段代码:

    private void getTrackFromFilePath(String filePath) {

    String[] filePathColumn = {
            MediaStore.Audio.Media.TITLE, //
            MediaStore.Audio.Media.ARTIST
    };

    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Logger.e(TAG, musicUri.toString() + " filePath: " + filePath);

    Cursor cursor = getContentResolver().query(musicUri, filePathColumn, MediaStore.Audio.Media.DATA + " LIKE ?", new String[] {
        filePath
    }, null);
    cursor.moveToFirst();

    DatabaseUtils.dumpCursor(cursor);

    cursor.close();
}
以下是相关的日志:

01-21 12:14:40.345: E/MusicScannerActivity(13513): content://media/external/audio/media filePath: file:///mnt/sdcard/Music/07%20Olly%20Murs%20Feat%20Flo%20Rida%20-%20Troublemaker.mp3
01-21 12:14:40.350: I/System.out(13513): >>>>> Dumping cursor android.content.ContentResolver$CursorWrapperInner@41e03748
01-21 12:14:40.350: I/System.out(13513): <<<<<
01-21 12:14:40.345:E/音乐实践(13513):content://media/external/audio/media 文件路径:file:///mnt/sdcard/Music/07%20Olly%20Murs%20Feat%20Flo%20Rida%20-%20Troublemaker.mp3
01-21 12:14:40.350:I/System.out(13513):>>>>>>>转储光标android.content.ContentResolver$CursorWrapperInner@41e03748

01-21 12:14:40.350:I/System.out(13513):对于那些想知道的人,我自己找到了问题的答案,有几件事阻止了这件事的发生。 第一个是我得到的文件路径中表示的空格编码如下:
%20
,但它们只是
MediaStore中的空格,因此无法进行匹配。
第二个是我得到的文件有
文件://
方案,而
MediaStore
不包括该方案

我这样做基本上解决了这个问题:

    filePath = filePath.replace("file://", "");
    filePath = filePath.replace("%20", " ");