Gak*_*ket 5 android pass-by-reference exoplayer
我想将“全屏”按钮添加到 Google 的标准 SimpleExoPlayer 实现中。我添加了 ImageButton,到目前为止一切正常。
然后我决定全屏将以下一种方式工作:按下按钮后,我用全屏 SimpleExoPlayerView 打开新活动,传递视频 uri 和当前位置,初始化播放器并寻找给定位置。它有效,但播放器重新初始化需要 1-3 秒,具体取决于不想要的设备。
现在我想在意图服务中拥有一个播放器实例,只需将现有播放器重新附加到任何想要显示它的视图(预览或全屏视图),如下所示:
mPlayerView.setPlayer(mPlayer);
Run Code Online (Sandbox Code Playgroud)
问题是服务将拥有播放器,而活动将拥有视图。他们中的任何一个都不能同时连接播放器进行查看。作为一种解决方法,我考虑使服务类可能具有到播放器的静态链接,因此活动将能够通过静态引用获取它。但这似乎是一些代码异味,我不知道线程之间的通信是否会出现问题。
那么,我如何将播放器从服务(不是 Serializable 或 Parcelable)传递给 Activity 或者如何将播放器视图传递给服务?
Sou*_*ugh -2
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);
}
Run Code Online (Sandbox Code Playgroud)
另外,不要忘记将其添加到您的活动清单中以防止活动重新加载:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1685 次 |
最近记录: |