我有这个代码用于显示MediaController,但是当我调用Show()方法时,它给了我一个致命的错误 .
MediaPlayer本身处理Service并从MediaPlayerControl接口获取Intent .
我的代码:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaController = new MediaController(this, false);
mediaController.setMediaPlayer(mediaPlayerControl);
mediaController.setAnchorView(findViewById(R.id.mediaController));
mediaController.setEnabled(true);
mediaController.show(0);
}
//implements MediaPlayerControl interface
private MediaPlayerControl mediaPlayerControl = new MediaPlayerControl()
{
//Override the methods to send Intent to the MediaPlayer Service
....
....
};
我的logcat:
07-27 11:03:07.365:E / AndroidRuntime(328):FATAL EXCEPTION:main 07-27 11:03:07.365:E / AndroidRuntime(328):java.lang.RuntimeException:无法启动活动ComponentInfo {com .example.radius100fm / com.example.radius100fm.MainActivity}:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null无效;你的活动在运行吗? 07-27 11:03:07.365:E / AndroidRuntime(328):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)07-27 11:03:07.365:E / AndroidRuntime(328):在android . app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)07-27 11:03:07.365:E / AndroidRuntime(328):at android.app.ActivityThread.access $ 1500(ActivityThread.java:117)07-27 11:03 :07.365:E / AndroidRuntime(328):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:931)07-27 11:03:07.365:E / AndroidRuntime(328):在android.os.Handler . dispatchMessage(Handler.java:99)07-27 11:03:07.365:E / AndroidRuntime(328):at android.os.Looper.loop(Looper.java:123)07-27 11:03:07.365:E / AndroidRuntime(328):在android.app.ActivityThread.main(ActivityThread.java:3683)07-27 11:03:07.365:E / AndroidRuntime(328):at java.lang.reflect.Method.invokeNative(Native Method) 07-27 11:03:07.365:E / AndroidRuntime(328):at java.lang.reflect.Method.invoke(Method.java:507)07-27 11:03:07.365:E / AndroidRuntime(328):at com.and roid.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)07-27 11:03:07.365:E / AndroidRuntime(328):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java :597)07-27 11:03:07.365:E / AndroidRuntime(328):at dalvik.system.NativeStart.main(Native Method)07-27 11:03:07.365:E / AndroidRuntime(328):引起: android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null无效;你的活动在运行吗? 07-27 11:03:07.365:E / AndroidRuntime(328):在android.view.ViewRoot.setView(ViewRoot.java:527)07-27 11:03:07.365:E / AndroidRuntime(328):在android . view.WindowManagerImpl.addView(WindowManagerImpl.java:177)07-27 11:03:07.365:E / AndroidRuntime(328):at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)07-27 11:03: 07.365:E / AndroidRuntime(328):在android.view.Window $ LocalWindowManager.addView(Window.java:424)07-27 11:03:07.365:E / AndroidRuntime(328):在android.widget.MediaController.show (MediaController.java:304)07-27 11:03:07.365:E / AndroidRuntime(328):at com.example.radius100fm.MainActivity.onCreate(MainActivity.java:100)07-27 11:03:07.365:E / AndroidRuntime(328):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)07-27 11:03:07.365:E / AndroidRuntime(328):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 1611)07-27 11:03:07.365:E / AndroidRuntime(328):... 11更多
我的代码有什么问题?
4 回答
我需要将MediaController显示给已经运行的MediaPlayer,所以我无法像e_v_e那样设置OnPreparedListener .
回答这个问题:Can't fix MediaController.show() exception我发现在调用所有活动生命周期方法之前调用了show方法 . 建议的解决方案(设置延迟显示)有效,但为了避免延迟,您可以将show放在onAttachedToWindow方法中,该方法在所有活动生命周期方法之后调用 .
使用此方法 .
我遇到了同样的问题,几个小时后得到了解决方案 . 我做了以下事情:
Summary :
Activity类实现接口:MediaPlayer.OnPreparedListener和MediaController.MediaPlayerControl
OnCreate . 的setContentView .
onStart . 创建MediaPlayer和MediaController,使用setOnPreparedListener启动侦听器并调用MediaPlayer的prepare()方法 .
实现方法onPrepared . 将mediaController与mediaPlayer链接,启动mediaPlayer,这里是使用处理程序调用方法show()的地方,只有当我们知道mediaPlayer准备就绪时 .
My code :
好的,我找到了答案 . 问题在于:
因为它在
onCreate()
中调用并且应用程序仍未激活 . 简单的尝试,添加底部,点击时调用mediaController.show(0);
,应用程序工作完美 .所以现在我必须在应用程序激活后调用此行 . 我试过onStart()和onResume(),但它没有用 . 同样的错误logCat .
我该如何解决?