2013-01-21 87 views
0

我非常需要從幾首不同的用例中檢索歌曲和歌曲。我通常可以很容易地從一個mp3 uri(方案:content://)查詢MediaStore,但我有時會收到一個文件路徑(方案:file://)。 我偶然發現了StackOverflow上的這篇文章: Get MediaStore content Uri from File path?從文件路徑檢索ContentProvider條目

不幸的是,它看起來不適合我。我肯定在某個地方做錯了什麼,但我不知道在哪裏。 這裏是我使用的代碼,我給它的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 [email protected] 
01-21 12:14:40.350: I/System.out(13513): <<<<< 

回答

0

對於那些想知道的,我自己找到了我的問題的答案,並且有幾件事情阻止了這件事的發揮。 第一個問題是,我得到的文件路徑中顯示的空格是這樣編碼的:%20,但它們只是MediaStore中的空格,因此無法匹配。 第二個是我得到的文件有file://方案,其中MediaStore不包括。

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

我基本上是這樣解決的問題