工作中用到了Android的 Presentation 双屏异显,本以为很简单的,结果真实项目中还是遇到了一些问题。
而这些问题呢,网上能查到的寥寥,群里也没人会告诉你。好在我尝试过程中一一解决了。这里记录下来。
遇到的问题有:
1.Presentation中弹出的对话框,显示像素密度可能跟前屏的像素密度不一致,导致必须得适配。
2.Presentation的异步显示,当异显的屏幕配置信息改变时,会自动dismiss,提示Presentation is being dismissed because display metrics have changed since it was created
3.Presentation中创建的对话框,不是模态的对话框,就是说如果它是个登录框的话,后面的内容还能点击。
4.Presentation中不能调用Android系统的软键盘。
.5.双屏之间的通信问题和同步异步显示。
6.后屏无法显示Toast消息问题。
这些问题好在我都一一解决了。网上问了个遍都没答案,我差点以为我是全网唯一一个用到这玩意的。。
你们还遇到过哪些坑呢?欢迎补充留言。
双屏异显的用法也很简单,如:
private void initPresentation() { mediaRouter = (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE); displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); displays = displayManager.getDisplays(); MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO); if (route != null) { Display presentationDisplay = route.getPresentationDisplay(); if (presentationDisplay != null) { presentation = new IndexPresent(this, displays[1]); presentation.show(); presentation.showLogin(); } } }
IndexPresent类继承自Presentation。
public class IndexPresent extends Presentation { private static final String TAG = "IndexPresent"; private Context context; private Context mycontext; ...... public IndexPresent(Context outerContext, Display display) { super(outerContext, display); Log.e(TAG, "IndexPresent"); this.context = outerContext; mycontext = getContext(); } private void initDate(){ Observable.interval(0, 1000, TimeUnit.MILLISECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { Date nowDate = new Date(); String setDay = ymd.format(nowDate); String setTime = hms.format(nowDate); String setWeek = DateUtils.getWeek(); indexDataBindingBean.hourMinuteSecond.set(setTime); indexDataBindingBean.yearMonthDate.set(setDay); indexDataBindingBean.week.set(setWeek); } }); } }