2017-01-15 4 views
1

Google의 표준 SimpleExoPlayer 구현에 '전체 화면'버튼을 추가하고 싶습니다. ImageButton을 추가하면 모든 것이 잘 작동합니다.ExoPlayer를 서비스 내에서 ExoPlayerView로 연결하는 방법

다음은 전체 화면이 다음 단계에서 작동하기로 결정했습니다. 버튼을 누른 후 전체 화면 SimpleExoPlayerView로 새로운 활동을 열고 동영상 URL 및 현재 위치를 전달하고 플레이어를 초기화하고 주어진 위치를 찾습니다. 작동하지만 플레이어가 다시 초기화하는 데 필요한 장치에 따라 1-3 초가 걸립니다. 이 같은 지금

내가 의도 서비스 내에서 플레이어의 인스턴스를 가지고 그냥 (미리보기 또는 전체 화면보기)를 보여주고 싶어 모든보기에 기존의 플레이어를 다시 연결하고 싶습니다 :

mPlayerView.setPlayer(mPlayer); 

문제는 해당 서비스에는 플레이어가 있고 활동에 대한 견해가 있습니다. 그들 중 어느 누구도 플레이어를 볼 수 있도록 둘 다 가질 수 없습니다. 이 문제를 해결하려면 서비스 클래스에 플레이어에 대한 정적 링크가있을 수 있으므로 활동은 정적 참조를 통해 가져올 수 있습니다. 하지만 이것은 약간의 코드 냄새처럼 보이고 스레드 간의 통신에 문제가 없는지 나는 알지 못합니다.

그렇다면 어떻게 플레이어를 서비스 (Serializable 또는 Parcelable이 아닌)에서 활동으로 전달할 수 있습니까? 아니면 어떻게 플레이어 뷰를 서비스에 전달할 수 있습니까?

+0

시도 :

@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); } 

또한 활동 재로드를 방지하기 위해 매니페스트 활동이를 추가해야합니다. https://developer.android.com/guide/components/bound-services.html –

답변

0

exoPlayer 핸들 전체 화면 충분 - 회전시 화면에 일치하도록 playerView의 레이아웃 매개 변수를 변경하거나 버튼을 누르십시오. 플레이어 인스턴스를 얻기 위해 서비스를 결합하는

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