2017-01-15 27 views
1

我想将“全屏”按钮添加到Google的标准SimpleExoPlayer实现中。我添加了ImageButton,并且一切运作良好。如何使用ExoPlayerView内部活动连接服务内部的ExoPlayer?

然后,我决定全屏幕将工作在下一个方法:按下按钮后,我用全屏SimpleExoPlayerView打开新的活动,通过视频uri和当前位置,初始化播放器并寻找给定的位置。它可以工作,但播放器重新初始化需要1-3秒,具体取决于不想要的设备。

现在我想有播放器的实例意图服务中,只是重新连接现有的玩家希望显示它(预览或全屏视图)的任何观点,就像这样:

mPlayerView.setPlayer(mPlayer); 

的问题是该服务将让玩家和活动有意见。他们中没有一个能够让玩家观看。作为一种解决方法,我想让服务类可以有一个静态链接给玩家,所以活动将能够通过静态引用来获取它。但是,这看起来像一些代码味道,我不知道线程之间的通信是否会有问题。

那么,我怎样才能将玩家从服务(不是可序列化或可分段)传递给活动,或者如何将玩家视图传递给服务?

+0

尝试绑定服务来获得播放器实例。 https://developer.android.com/guide/components/bound-services.html –

回答

0

exoPlayer处理全屏不够好 - 尝试更改playerView的布局参数以匹配旋转屏幕或按下按钮。

@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"