Intereting Posts
Android NFC: тег потерян, когда команда APDU отправлена ​​на смарт-карту Вызов GetPicture () PhoneGap не сохраняется в Галерее на Android-телефоне Как разбудить телефон удаленно? Как динамически изменять изображения в SurfaceView? Относительные различия между 1.5 и 2.1 Как обновить массив элементов в списке AlertDialog, созданный с помощью AlertDialog.builder после создания Android – Как использовать инструмент Android Asset Packaging Tool? Действительно ли модели Realm требуют геттеров и сеттеров? Android – Регистрация широковещательного приемника для двух целей? Как установить прокси-аутентификацию для Android sdkmanager из командной строки? AndEngineRuntimeException: обнаружено обнаружение несовместимого устройства. Ошибка приложения CursorWindow приложения Android Возможна загрузка во внутреннюю память? Рекомендации по использованию токена для Android OAuth2 Как сделать индикатор хода строки заголовка индикатором скорости вращения горизонтальной полосы?

Android: Как правильно инициализировать проигрыватель YouTube внутри себя?

Я пытаюсь инициировать игрока YouTube внутри действия. Однако время от времени я получаю это исключение:

Fatal Exception: java.lang.IllegalStateException YouTubeServiceEntity not initialized 

Вот как я пытаюсь инициализировать проигрыватель YouTube в своей деятельности. (Это делается внутри OnCreate ())

  try { final YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); youTubeView.initialize("KEY", new YouTubePlayer.OnInitializedListener() { @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean Boolean) { if(ad==null || ad.getVideo_urls() == null) return; if (!Boolean) { try { if (ad.getVideo_urls() != null && ad.getVideo_urls().length() > 0) { String url = ad.getVideo_urls().getString(0); if (url.contains("youtube")) { String id = ad.getVideo_urls().getString(0).split("embed/")[1]; youTubeView.setVisibility(View.VISIBLE); MyYouTubePlayer = youTubePlayer; MyYouTubePlayer.cueVideo(id); } } else { youTubeView.setVisibility(View.GONE); Log.i(Constants.getTag(), "Video not found"); //Making sure the MyYouTubePlayer is null and if not is being released if(MyYouTubePlayer != null) { MyYouTubePlayer.release(); } } } catch (JSONException e) { youTubePlayer.release(); e.printStackTrace(); } } } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { youTubeView.removeAllViews(); } }); } catch(Exception e){ e.printStackTrace(); Log.e("Youtube", "error initializing youtube"); } 

Самое странное, что этот вопрос не является постоянным. Время от времени это происходит, и я понятия не имею, почему. Можете ли вы сказать мне, что может быть причиной этого?

Здесь также находится logcat:

 java.lang.IllegalStateException: YouTubeServiceEntity not initialized at android.os.Parcel.readException(Parcel.java:1433) at android.os.Parcel.readException(Parcel.java:1379) at com.google.android.youtube.player.internal.l$a$aa() at com.google.android.youtube.player.internal.oa() at com.google.android.youtube.player.internal.ad.a() at com.google.android.youtube.player.YouTubePlayerView.a() at com.google.android.youtube.player.YouTubePlayerView$1.a() at com.google.android.youtube.player.internal.rg() at com.google.android.youtube.player.internal.r$ca() at com.google.android.youtube.player.internal.r$ba() at com.google.android.youtube.player.internal.r$a.handleMessage() at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4960) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) at dalvik.system.NativeStart.main(NativeStart.java) 

У меня тоже была эта ошибка, я работал над ней, создав собственный класс, расширяющий YouTubePlayerSupportFragment , может быть, мой код действительно поможет вам, который отлично работает для меня.

Я инициализирую свой проигрыватель YouTube таким образом:

 private String currentVideoID = "<your video id>"; private YouTubePlayer activePlayer; private void init() { initialize(ConstantsRepository.GOOGLE_API_SERVER_KEY, new YouTubePlayer.OnInitializedListener() { @Override public void onInitializationFailure(YouTubePlayer.Provider arg0, YouTubeInitializationResult arg1) { // youtube is not installed } @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { activePlayer = player; activePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); if (!wasRestored) { activePlayer.loadVideo(getArguments().getString("url"), 0); } } }); } 

В вашей деятельности укажите фрагмент youtube в layout.xml и выполните следующую замену в onCreate:

  YTPlayerFragment myFragment = YTPlayerFragment.newInstance("oVkK3X9zMyI"); getFragmentManager().beginTransaction().replace(R.id.youtube_container, myFragment).commit(); 

Эта нить похожа и помогла мне:

Инициализация проигрывателя YouTube в фрагменте

Это также было полезно: борьба с фрагментом поддержки проигрывателя Youtube

После некоторого копания я нашел свою проблему. Проблема заключалась в использовании библиотеки youtube. Он устарел и ЗДЕСЬ все было прекрасно 🙂

Я также сталкиваюсь с этой ошибкой прямо сейчас в своем приложении. Проблема возникает, когда пользователь выходит из фрагмента проигрывателя Youtube, содержащего активность, не будучи правильно инициализированным. Это довольно случайный и нелегко воспроизвести.

Я просто использую try-catch, чтобы избежать этого, и, к счастью, он еще не был воспроизведен.

 try { mYouTubePlayerFragment.initialize(DEVELOPER_KEY, this); } catch(IllegalStateException w){} 

Опять это не может быть верным решением.

Одним из решений может быть проверка OnBackPressed() ли инициализирован проигрыватель.

 isInitializationComplete = false @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) { isInitializationComplete = true; } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { isInitializationComplete = true; } @Override public void onBackPressed() { if(!isInitializationComplete) return; } 

Попробуйте обезьяну, чтобы воспроизвести ее чаще.

 adb shell monkey -p com.packagename -v 500 

Вот ссылка на пробник для этой ошибки.