如何将资源目录中的歌曲添加到播放列表

时间:2015-05-08 14:04:28

标签: java android

我一直致力于一个项目,该项目使用设备外部存储设备中的所有歌曲生成播放列表,如下所示:

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忽略它,因此歌曲不会显示在播放列表中。所以我不知道如何通过我提到的第一种方式或第二种方式来解决这个问题。我希望你对这个问题有所建议!感谢您的关注!

1 个答案:

答案 0 :(得分:0)

也许您必须让您的contentResolver再次获取这些对象,以便显示新歌曲。 你只调用一次resolveContent吗?

更新:我相信您的回答是在这个问题中: Content Resolver Query is not finding music on sd-card