Intereting Posts
Другое действие появляется и покрывает половину размера экрана Calendar.MINUTE, дающий минуты без начального нуля Плитка вытягиваемая иногда растягивается Почему использование статических вспомогательных методов в Java плохое? Макеты Eclipse и Android XML дают «по умолчанию» не лучшее соответствие для любой комбинации устройств / локалей » OpenSearch () в приложении для новичков Android не определено Компиляция STXXL под Android NDK r8b Android. Избегайте действий, которые нужно уничтожить, просто останавливая или приостанавливая его при нажатии кнопки «Назад». Фоновая служба Android перезагружается, когда приложение убито Ошибка: не удается открыть файл класса R.java Что означает «Этот метод устарел» означает для разработчиков приложений Разница между API AndroidShadowLayer Accelerometer SensorEvent временная метка TabLayout выбранный уровень гравитации Как получить цвета системы Android

Странное поведение – фрагмент VideoViewer не работает с MediaController

Я пытаюсь создать фрагмент VideoViewer. Ниже приведены два случая, которые я пробовал, и наблюдения. В обоих случаях вид фрагмента раздувается из следующего макета:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <VideoView android:id="@+id/fragment_video_viewer_video" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" /> </RelativeLayout> 

Случай 1: VideoView без медиаконтроллера – отлично работает. Ниже приведен код для метода onActivityCreated

 /* Initialize the variables here, retrieve views and */ @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Assignment for the local variables mVideoView = (VideoView) getView().findViewById(R.id.fragment_video_viewer_video); mVideoView.setVideoPath("/sdcard/family_guy_test.3gp");//(videoUri); mVideoView.requestFocus(); mVideoView.start(); } 

Случай 2: VideoView с медиа-контроллером – приложение падает, когда я касаюсь VideoView. Ниже приведен код для метода onActivityCreated

 /* Initialize the variables here, retrieve views and */ @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Assignment for the local variables mVideoView = (VideoView) getView().findViewById(R.id.fragment_video_viewer_video); mVideoView.setVideoPath("/sdcard/family_guy_test.3gp");//(videoUri); MediaController mediaController = new MediaController(getActivity().getApplicationContext()); mediaController.setAnchorView(mVideoView); mVideoView.setMediaController(mediaController); mVideoView.requestFocus(); } 

Выход логарифма приведен ниже:

 WARN/WindowManager(124): Failed looking up window WARN/WindowManager(124): java.lang.IllegalArgumentException: Requested window null does not exist WARN/WindowManager(124): at com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:9398) WARN/WindowManager(124): at com.android.server.WindowManagerService.addWindow(WindowManagerService.java:1906) WARN/WindowManager(124): at com.android.server.WindowManagerService$Session.add(WindowManagerService.java:6876) WARN/WindowManager(124): at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:66) WARN/WindowManager(124): at com.android.server.WindowManagerService$Session.onTransact(WindowManagerService.java:6848) WARN/WindowManager(124): at android.os.Binder.execTransact(Binder.java:288) WARN/WindowManager(124): at dalvik.system.NativeStart.run(Native Method) WARN/WindowManager(124): Attempted to add window with token that is not a window: null. Aborting. WARN/dalvikvm(8144): threadid=1: thread exiting with uncaught exception (group=0x400287f0) ERROR/AndroidRuntime(8144): FATAL EXCEPTION: main ERROR/AndroidRuntime(8144): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? ERROR/AndroidRuntime(8144): at android.view.ViewRoot.setView(ViewRoot.java:505) ERROR/AndroidRuntime(8144): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) ERROR/AndroidRuntime(8144): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) ERROR/AndroidRuntime(8144): at android.widget.MediaController.show(MediaController.java:304) ERROR/AndroidRuntime(8144): at android.widget.MediaController.show(MediaController.java:249) ERROR/AndroidRuntime(8144): at android.widget.VideoView.toggleMediaControlsVisiblity(VideoView.java:567) ERROR/AndroidRuntime(8144): at android.widget.VideoView.onTouchEvent(VideoView.java:518) ERROR/AndroidRuntime(8144): at android.view.View.dispatchTouchEvent(View.java:3766) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671) ERROR/AndroidRuntime(8144): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) ERROR/AndroidRuntime(8144): at android.app.Activity.dispatchTouchEvent(Activity.java:2086) ERROR/AndroidRuntime(8144): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) ERROR/AndroidRuntime(8144): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671) ERROR/AndroidRuntime(8144): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) ERROR/AndroidRuntime(8144): at android.app.Activity.dispatchTouchEvent(Activity.java:2086) ERROR/AndroidRuntime(8144): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655) ERROR/AndroidRuntime(8144): at android.view.ViewRoot.handleMessage(ViewRoot.java:1785) ERROR/AndroidRuntime(8144): at android.os.Handler.dispatchMessage(Handler.java:99) ERROR/AndroidRuntime(8144): at android.os.Looper.loop(Looper.java:123) ERROR/AndroidRuntime(8144): at android.app.ActivityThread.main(ActivityThread.java:4627) ERROR/AndroidRuntime(8144): at java.lang.reflect.Method.invokeNative(Native Method) ERROR/AndroidRuntime(8144): at java.lang.reflect.Method.invoke(Method.java:521) ERROR/AndroidRuntime(8144): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) ERROR/AndroidRuntime(8144): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) ERROR/AndroidRuntime(8144): at dalvik.system.NativeStart.main(Native Method) WARN/ActivityManager(124): Force finishing activity com.comp.ias/.MainActivity WARN/ActivityManager(124): Activity pause timeout for HistoryRecord{43f755b0 com.comp.ias/.MainActivity} WARN/WindowManager(124): No window to dispatch pointer action 1 

Solutions Collecting From Web of "Странное поведение – фрагмент VideoViewer не работает с MediaController"

Я понял, что проблема была в том, что я использовал. Мне пришлось использовать контекст Activity вместо контекста приложения. В частности, я должен был сделать:

 MediaController mediaController = new MediaController(getActivity()); 

Документация о том, когда использовать, какой контекст очень разрежен. Иногда можно использовать любой контекст. Иногда нам нужно использовать определенный контекст. Я думаю, что интуиция за использованием контекста заключается в том, что «если экземпляр класса привязан к активности, используйте контекст активности, иначе используйте контекст приложения».