我创建了3个声音的3个资产文件描述符(放入res / raw)
AssetFileDescriptor afd1 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_1);
AssetFileDescriptor afd2 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_2);
AssetFileDescriptor afd3 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_3);
然后我将它们放入一个数组中:
array.add(afd1);
array.add(afd2);
array.add(afd3);
然后我创建一个MediaPlayer实例,让它只播放数组中的第一个声音
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(array.get(0).getFileDescriptor());
mp.prepare();
mp.start()
但是,播放阵列中的所有3个声音。 然后我尝试使用setDataSource(FileDescriptor,long,long)而不是setDataSource(FileDescriptor fd),mp只播放阵列中的第一个声音,如我所愿。
AssetFileDescriptor afd = array.get(0);
mp.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
我的问题是上面的两个setDataSource方法有什么区别?使用此处包含的代码,为什么setDataSource(array.get(0))会播放数组中的所有3个声音?
非常感谢。
答案 0 :(得分:2)
第二个被告知长度(和偏移),而第一个播放只要文件描述符返回一些数据就播放。资源通常存储在存档中,因此从文件描述符读取的内容将继续通过第一首歌曲,然后找到第二首歌曲,然后是第三首歌曲。