我非常特别需要从一些来自几个不同用例的歌曲中检索Artist和Track。我通常可以很容易地从mp3 uri(方案:content://
)查询MediaStore,但我有时会收到一个文件路径(scheme:file://
)。
我在StackOverflow上偶然发现了这篇文章:
Get MediaStore content Uri from File path?
不幸的是,它似乎对我不起作用。我肯定在某处做错了什么,但我不知道在哪里。 这是我使用的代码,我给它的filePath在执行之前就已经过验证。
这是一段代码:
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): <<<<<
我尝试使用我要求的列稍微玩一下但没有成功。
答案 0 :(得分:0)
对于那些想知道的人,我自己找到了问题的答案,并且有些事情阻止了这件事的发生。
第一个是我得到的文件路径中表示的空格编码如下:%20
,但只是MediaStore
中的空格,因此无法进行匹配。
第二个是我获得的文件具有file://
方案,而MediaStore
不包含该方案。
我基本上解决了这个问题:
filePath = filePath.replace("file://", "");
filePath = filePath.replace("%20", " ");