内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
检查下这段代码:
private MediaPlayer createMediaPlayer(File mediaFile)
throws IOException {
MediaPlayer mPlayer = new MediaPlayer();
//example of mediaFile =/data/data/package/cache/playingMedia0.dat
FileInputStream fis = new FileInputStream(mediaFile);
mPlayer.setDataSource(fis.getFD());
mPlayer.prepare();
return mPlayer;
}
当前状态:
1-从Android 1.6到2.1可以正常工作,但不是像Android 2.2这样的高级版本。
2-“mPlayer.setDataSource(fis.getFD())”是抛出错误的行。
3-错误是“无法创建媒体播放器”
我的目标是让Android 2.1及更高版本的代码更安全。
LogCat跟踪:
Unable to to create media player
Error copying buffered conent.
java.lang.NullPointerException
com.ms.iradio.StreamingMediaPlayer.startMediaPlayer(StreamingMediaPlayer.java:251)
com.ms.iradio.StreamingMediaPlayer.access$2(StreamingMediaPlayer.java:221)
com.ms.iradio.StreamingMediaPlayer$2.run(StreamingMediaPlayer.java:204)
android.os.Handler.handleCallback(Handler.java:587)
android.os.Handler.dispatchMessage(Handler.java:92)
android.os.Looper.loop(Looper.java:123)
android.app.ActivityThread.main(ActivityThread.java:3683)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:507)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
dalvik.system.NativeStart.main(Native Method)
该StreamingMediaPlayer
课程使用双缓冲技术来解决Android 1.2以前版本中的限制。Android OS的所有产品版本都包含支持流媒体的MediaPlayer(1)。我会建议这样做,而不是使用这种双缓冲技术来解决问题。
Android OS 2.2用FrightCast播放器取代了旧的媒体播放器代码,在这种情况下可能采取不同的行动。
你的堆栈跟踪中的行号不会映射到您链接的文件,因此我认为你实际使用的版本不同。我会猜测,这NullPointerException
是由报道,MediaPlayer
但既不FileInputStream
是返回FileDescriptor
可以null
。