2015-05-08 56 views
1

我一直在努力,生成播放列表從設備的外部存儲中的所有歌曲,像這樣的項目:如何從資源目錄中的歌曲添加到播放列表

private long resolveContent() { 
ContentResolver contentResolver = getContentResolver(); 
     addMP3TestFile(); 
     Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     Cursor cursor = contentResolver.query(uri, null, null, null, null); 
...} 

的代碼工作正常,歌曲會在播放列表中顯示,但我想爲此播放列表添加額外的歌曲。這首歌曲在res/raw/目錄中。所以我想出了兩個解決方案,或者將歌曲複製到設備上,然後讓contentResolver將此歌曲包含到播放列表中,或者將該歌曲從res/raw/目錄內部添加到播放列表中。我剛纔想我提到的第一個選項,但沒有成功,此代碼的歌曲添加到設備:

private void addMP3TestFile(){ 
    String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Music/"; 
    String fileName = "test_file.mp3"; 

    File newSoundFile = new File(baseDir, fileName); 
    if(!newSoundFile.exists()){ 
     try { 
      byte[] readData = new byte[1024*500]; 
      InputStream inputStream = getResources().openRawResource(R.raw.toth); 
      FileOutputStream fileOutputStream = new FileOutputStream(newSoundFile); 
      int i = inputStream.read(readData); 

      while (i != -1) { 
       fileOutputStream.write(readData, 0, i); 
       i = inputStream.read(readData); 
      } 
      Log.i("song","Success! path = "+newSoundFile.getAbsolutePath()); 

      fileOutputStream.close(); 
     } catch (IOException io) { 
      Log.i("song","Error "+io.getMessage()); 
     } 
    } 


} 

成功的歌曲拷貝到設備上,但contentResolver忽略它,所以這首歌不在播放列表中顯示。所以我不知道如何解決這個問題,無論是我提到的第一種方式還是第二種。我希望你有這個問題的建議!感謝您的關注!

回答

0

也許你必須讓你的contentResolver再次獲取這些對象,以便顯示新的歌曲。 你只需要調用resolveContent一次嗎?

更新:我相信你的答案是這樣一個問題: Content Resolver Query is not finding music on sd-card

+0

是的,但是我試着撥打resolveContent兩次,它也不能工作。它顯示所有歌曲兩次而不是我從res/raw /目錄添加的歌曲。它一直忽略這首歌。 –

+0

你檢查過用戶歌曲正在被複制嗎? –

+0

是的,我做了,它成功地複製到設備。我試圖刪除歌曲,然後再次啓動應用程序,然後再次複製。但現在我注意到了一些新的東西我嘗試將我的設備中的所有歌曲都移動到SD卡上,然後再次啓動應用程序,但是我將SD卡從設備中取出。它不會讀取應用程序複製到設備的歌曲,但是當我再次設置卡時,然後啓動應用程序,歌曲顯示在歌曲列表中。但只有當我這樣做。否則,它會忽略該歌曲。 –

相關問題