0

我非常需要从来自几个不同用例的歌曲中检索艺术家和曲目。我通常可以content://很容易地从 mp3 uri(方案:)查询 MediaStore,但有时我会收到文件路径(方案:)file://。我偶然发现了 StackOverflow 上的这篇文章: Get MediaStore content Uri from File path?

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

这是一段代码:

    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();
}

这是相关的logcat:

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): <<<<<

我尝试在我请求的列上进行一些操作,但没有成功。

4

1 回答 1

0

对于那些想知道的人,我自己找到了我的问题的答案,并且有几件事阻止了这个东西的工作。第一个是我得到的文件路径中表示的空格是这样编码的:%20,但只是空格,MediaStore所以无法进行匹配。第二个是我得到的文件有file://计划,MediaStore但不包括在内。

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

    filePath = filePath.replace("file://", "");
    filePath = filePath.replace("%20", " ");
于 2013-01-21T21:25:45.677 回答