1
我已經創建的3種聲音3資產文件描述符(放在res /原始)的Android:MediaPlayer.setDataSource(的FileDescriptor FD)對MediaPlayer.setDataSource(FD FileDescriptor的,長偏移,長的長度)
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個聲音?
非常感謝。
非常感謝您的解釋。不過,我依然隱約瞭解文件描述符的概念。如果使用沒有設置長度和偏移量的文件描述符,將使MediaPlayer從FileDecriptor_1播放到FileDecriptor_2,FileDecriptor_3等等。那麼setDataResource(FileDescriptor fd)方法的用法是什麼呢?我假設應該只有setDataSource(FileDescriptor,long startOffset,long length)。這是我仍然不明白的地方。 – 2015-02-10 15:59:11
文件描述符指向整個文件,因此您需要爲資源提供偏移量和長度,因爲所有資源都位於一個大檔案(文件)中。如果您在應用程序數據目錄或SD卡上打開一個文件,除文件外沒有內容,您不需要指定偏移量和長度。 – StenSoft 2015-02-10 16:25:56
非常感謝StenSoft!我是android編程的新手,所以我真的需要像你這樣善良的人幫助!祝你今天愉快! – 2015-02-15 03:04:08