2017-01-15 7 views
1

Я хочу добавить кнопку «Полный экран» к стандартной реализации SimpleExoPlayer из Google. Я добавил ImageButton, и все работает хорошо.Как подключить ExoPlayer внутри службы с ExoPlayerView внутри действия?

Тогда я решил, что полноэкранный режим будет работать следующим образом: после нажатия на кнопку я открываю новую активность с помощью полноэкранного SimpleExoPlayerView, передаю туда видео uri и текущую позицию, инициализирует плеер и ищет заданную позицию. Он работает, но повторная инициализация проигрывателя занимает 1-3 секунды в зависимости от устройства, чего не хотят.

Теперь я хотел бы иметь экземпляр плеера внутри намерения службы и просто прикрепить существующий плеер к любому мнению, что хочет показать его (предварительный просмотр или полноэкранный режим просмотра), как это:

mPlayerView.setPlayer(mPlayer); 

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

Итак, как я могу передать плеер из Сервиса (который не является Serializable или Parableable) в действие или как передать плеер в Службу?

+0

попытаться связать службу, чтобы получить экземпляр проигрывателя. https://developer.android.com/guide/components/bound-services.html –

ответ

0

exoPlayer обрабатывает полноэкранный режим достаточно хорошо - попробуйте изменить параметры макета плеера в соответствии с экраном при повороте или нажатием кнопки.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    int width; 
    int height; 

    View decorView = getWindow().getDecorView(); 
    int uiOptions; 

    if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Resources r = getResources(); 
     float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, r.getDisplayMetrics()); 
     width = CoordinatorLayout.LayoutParams.MATCH_PARENT; 
     height = (int)px; 
     uiOptions = View.SYSTEM_UI_FLAG_VISIBLE; 
    } else { 
     uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
    } 

    decorView.setSystemUiVisibility(uiOptions); 
    final CoordinatorLayout.LayoutParams lp = new CoordinatorLayout.LayoutParams(width, height); 
    mAppBar.setLayoutParams(lp); 
} 

Также не забудьте добавить к вашей деятельности манифеста для предотвращения активности перезарядки:

android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"