概述
1.场景说明
日常生活中,有时候会遇到Android设备连接两个屏幕进行显示的问题,比如酒店登记信息时,一个屏幕用于员工操作,一个屏幕显示相关信息供顾客查看。这里就涉及到android的双屏异显的问题,实现android的双屏异显,Google也提供了相应的API方法Presentation。
2.Presentation介绍
要了解API的具体调用,推荐先查看官方的文档:Presentation文档
Android从4.2开始支持双屏显示,开发时需 minSdkVersion >= 17 。Android连接两个屏幕时,自动分配主屏和副屏,主屏显示正常的Activity界面,副屏通过创建Presentation类来实现。
通过查看Presentation继承关系可知,Presentation继承自Dialog,创建的时候需要遵循Dialog相关要求。
3.创建Presentation
public class MyPresentation extends Presentation implements View.OnClickListener {
private Context context;
private Display display;
public MyPresentation(Context outerContext, Display display) {
super(outerContext, display);
this.context = outerContext;
this.display = display;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.presentation_my);
initView();
}
private void initView() {
TextView tv_back = findViewById(R.id.presentation_tv_back);
tv_back.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.presentation_tv_back:
dismiss();
break;
}
}
}
创建Presentation后,自动生成构造函数,构造函数中
- outerContext:上下文环境,可以是主屏Activity,ApplicationContext或者Service
- display:副屏的Display
OnCreate方法中完成布局的初始化,可设置相应按钮的监听,关闭当前Presentation,执行dismiss()方法即可(前提:副屏支持点击)
4.获取屏幕Display信息
创建好Presentation后,需要在主屏Activity上获取屏幕的Display信息,让其显示副屏信息,Android系统提供了两个方式来获取Display信息。
4.1 MediaRouter方式
MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(
MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
Display presentationDisplay = route != null ? route.getPresentationDisplay() : null;
//显示副屏Presentation
if (mPresentation == null && presentationDisplay != null) {
mPresentation = new MyPresentation(context, presentationDisplay);
try {
mPresentation.show();
} catch (WindowManager.InvalidDisplayException ex) {
mPresentation = null;
}
}
4.2 DisplayManager方式
DisplayManager mDisplayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
displays = mDisplayManager.getDisplays();
if (displays.length > 1) {
myPresentation = new MyPresentation(this, displays[1]);
myPresentation.show();
}
在Activity中添加上面的代码后,即可实现双屏双显的效果
5.双屏双显的优化:
5.1 副屏显示Toast提醒
通过上面的方法实现双屏双显后,如果在Presentation创建Toast提醒,会出现提醒显示在主屏上的问题,这里需要注意创建Toast的Context参数
Toast.makeText(getContext(),"副屏Toast",Toast.LENGTH_SHORT).show();
5.2 副屏内容常驻,不退出
因为Presentation相当于在主屏的Activity上创建了一个特殊Dialog,所以Presentation会随着主屏Activity的生命周期显示隐藏,如何让副屏常驻,不随主屏Activity退出。在Dialog中,我们知道可以通过创建系统级弹框的方式来做,Presentation中也是一样。
-
添加系统权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
-
在Presentation中添加系统弹框代码
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
6.Presentation限制
- Presentation实际上是一个特殊的Dialog,因此在Presentation中无法创建Fragment、popupwindow等组件
- Presentation显示的副屏和主屏的尺寸是不相同的,绘制UI时需特别注意
至此,Presentation相关的内容就介绍结束了,有问题,欢迎留言。
最后
以上就是怕黑飞机为你收集整理的Android Presentation双屏异显效果的实现的全部内容,希望文章能够帮你解决Android Presentation双屏异显效果的实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复