2016-10-09 72 views
0

我需要的是得到像結果從這個代碼如何使用MediaStore

ContentResolver musicResolver = getActivity().getContentResolver(); 
    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 

但在一個特定的目錄,而不是從所有的目錄,以獲得特定目錄中的所有音樂和所有子目錄的列表。 這是我到目前爲止已經試過:

ContentResolver musicResolver = mContext.getContentResolver(); 
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor musicCursor = null; 
    try { 
     musicCursor = musicResolver.query(uri, 
       new String[]{ 
         MediaStore.Audio.Media._ID, 
         MediaStore.Audio.Media.ARTIST, 
         MediaStore.Audio.Media.TITLE, 
         MediaStore.Audio.Media.DURATION, 
       }, 
       MediaStore.Audio.Media.DATA + "=? ", 
       new String[]{new File("some path to directory").getCanonicalPath()}, 
       null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

但這種方法moveToFirst() 返回false所以我的理解它是空的。 感謝您的未來幫助。

+0

您正在要求Media.DATA等於「some path ....」,但MediaStore.Audio.Media.DATA包含完整路徑,包括軌道及其擴展名,因此條件永遠不會爲真。你應該做的是使用LIKE操作符。將路徑如下所示 searchpath =「%」+ strpath +「%」; //查找路徑字符串 和MediaStore.Audio.Media.DATA +「LIKE?」。查詢現在將查找包含在完全限定路徑中的路徑字符串。 – Theo

回答

0
searchpath = "%" + yourpath + "%";// looking for path string 
    ContentResolver musicResolver = mContext.getContentResolver(); 
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor musicCursor = null; 
    try { 
    musicCursor = musicResolver.query(uri, 
      new String[]{ 
        MediaStore.Audio.Media._ID, 
        MediaStore.Audio.Media.ARTIST, 
        MediaStore.Audio.Media.TITLE, 
        MediaStore.Audio.Media.DURATION, 
      }, 
      MediaStore.Audio.Media.DATA + "LIKE? ", 
      new String[]{searchpath}, 
      null); 
} catch (IOException e) { 
    e.printStackTrace(); 
}