新的开始,新的知识,该文章是填坑用的。
- setDataSource (String path)
- setDataSource (FileDescriptor fd)
- setDataSource (Context context, Uri uri)
- setDataSource (FileDescriptor fd, long offset, long length)
其中使用FileDescriptor时,需要将文件放到与res文件夹平级的assets文件夹里,然后使用:
AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");
m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());
在写作业的过程中,我使用的是第二种方法,上代码。
mediaPlayer = MediaPlayer.create(this, R.raw.sound01);
//进入准备状态
//mediaPlayer.prepare();
mediaPlayer.start();
为什么将mediaPlayer.prepare();注释掉呢。因为这句话是作为网络资源加载使用的,在我得实际项目中并不需要加载,所以注释即可。下面为加上的报错信息。
W/System.err: java.lang.IllegalStateException
at android.media.MediaPlayer._prepare(Native Method)
at android.media.MediaPlayer.prepare(MediaPlayer.java:1278)
at com.example.sixteenthlesson.service.InfoService2.initMusic(InfoService2.java:58)
at com.example.sixteenthlesson.service.InfoService2.onCreate(InfoService2.java:31)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3339)
W/System.err: at android.app.ActivityThread.-wrap4(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
E/MediaPlayerNative: prepareAsync called in state 8, mPlayer(0x99243ca0)