Android mediaplayer Android:MediaPlayer.setDataSource(FileDescriptor fd)与MediaPlayer.setDataSource(FileDescriptor fd,长偏移量,长长度)

Android mediaplayer Android:MediaPlayer.setDataSource(FileDescriptor fd)与MediaPlayer.setDataSource(FileDescriptor fd,长偏移量,长长度),android-mediaplayer,Android Mediaplayer,我已经创建了3个包含3个声音的资产文件描述符(放在res/raw中) 然后我将它们放入一个数组: array.add(afd1); array.add(afd2); array.add(afd3); 然后我创建了一个MediaPlayer实例,让它只播放阵列中的第一个声音 MediaPlayer mp = new MediaPlayer(); mp.setDataSource(array.get(0).getFileDescriptor()); mp.prepare()

我已经创建了3个包含3个声音的资产文件描述符(放在res/raw中)

然后我将它们放入一个数组:

    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种声音


非常感谢

第二个被告知长度(和偏移量),而第一个被告知只要文件描述符返回一些数据就播放。资源通常存储在存档中,因此从文件描述符中读取的内容将继续经过第一首歌曲,然后找到第二首歌曲,然后是第三首歌曲。

非常感谢您的解释。然而,我仍然模糊地理解了文件描述符的概念。如果使用文件描述符而不设置长度和偏移量,则MediaPlayer将从FileDecriptor_1播放到FileDecriptor_2、FileDecriptor_3,依此类推。那么setDataResource(FileDescriptor fd)方法的用途是什么呢?我假设应该只有setDataSource(FileDescriptor、long startOffset、long length)。这就是我仍然不理解的地方。文件说明符指向整个文件,所以您需要提供资源的偏移量和长度,因为所有资源都在一个大归档(文件)中。如果您在应用程序数据目录或SD卡上打开一个文件,则除了该文件之外没有其他内容,您不需要指定偏移量和长度。非常感谢!我是android编程的新手,所以我真的需要像你这样善良的人的帮助!祝您有个美好的一天!
AssetFileDescriptor afd = array.get(0);

mp.setDataSource(afd.getFileDescriptor(),
                afd.getStartOffset(), afd.getLength());