博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android presentation
阅读量:4577 次
发布时间:2019-06-08

本文共 5526 字,大约阅读时间需要 18 分钟。

对于双屏异显(lcd 和 hdmi 的双屏异显),android框架已经支持,但是底层接口功能还是要自己去实现,且需要底层驱动支持。

使用presentation 去画第二个display就好了。

1 MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);2 MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute();3 if(route != null) {4      Display presentationDisplay = route.getPresentationDisplay();5      if (presentationDisplay != null) {6            Presentation presentation = new MyPresentation(context, presentationDisplay);7            presentation.show();8      }9 }

应用在辅助显示器上显示不同的内容程序,以有线或Wi-Fi将外接显示输出连接到用户设备上,显示独特的内容。

-------------------------------------------------------------

注意:public Presentation (Context outerContext, Display display) 这个初始化函数,这里的outerContext必须要activity,一个activity的context,虽然presentation会创建自己的context,但是它是在这个参数context之上的,而且这个activity跳转后presentation就消失了,如果说用getApplicationContext()就直接报错,也不行。

-------------------------------------------------------------

要为辅助显示屏创建独特的内容:

1. 您需要扩展Presentation类,并实现onCreate()回调方法。在onCreate()中,调用setContentView()来指定您要在辅助显示屏上显示的UI。

2. 作为Dialog类的扩展,Presentation类提供了一个区域,在其中,您的应用可以在辅助显示屏上显示不同的UI。

获取显示Presentation的辅助显示屏:

1. 可以使用DisplayManager或者MediaRouter的API。其中,使用DisplayManagerAPI可以使您获得当前连接的所有显示屏的枚举,而MediaRouter则可以使您直接访问系统为Presentation设置的默认显示输出。

2. 可以给MediaRouter.getSelectedRoute()传一个ROUTE_TYPE_LIVE_VIDEO来获得演示的默认显示器。它将返回一个MediaRouter.RouteInfo对象,描述了系统为视频演示所选择的当前路由。如果MediaRouter.RouteInfo不空,调用getPresentationDisplay()即可获取当前连接的显示屏对象:Display。

3. 然后,您可以将这个Display对象传入Presentation的构造函数。调用Presentation.show()方法,演示就会出现在辅助显示屏上了。

为在运行时即时检测新接入的显示器,需要先创建一个MediaRouter.SimpleCallback的实例。在其中,您需要实现onRoutePresentationDisplayChanged()回调方法。当新的显示器连接时,系统会调用这个回调方法。

1 private final MediaRouter.SimpleCallback mMediaRouterCallback = 2             new MediaRouter.SimpleCallback() { 3         @Override 4         public void onRouteSelected(MediaRouter router, int type, RouteInfo info) { 5             Log.d(TAG, "onRouteSelected: type=" + type + ", info=" + info); 6             updatePresentation(); 7         } 8  9         @Override10         public void onRouteUnselected(MediaRouter router, int type, RouteInfo info) {11             Log.d(TAG, "onRouteUnselected: type=" + type + ", info=" + info);12             updatePresentation();13         }14 15         @Override16         public void onRoutePresentationDisplayChanged(MediaRouter router, RouteInfo info) {17             Log.d(TAG, "onRoutePresentationDisplayChanged: info=" + info);18             updatePresentation();19         }20     };

 

1 private void updatePresentation() { 2         // Get the current route and its presentation display. 3         MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute( 4                 MediaRouter.ROUTE_TYPE_LIVE_VIDEO); 5         Display presentationDisplay = route != null ? route.getPresentationDisplay() : null; 6  7         // Dismiss the current presentation if the display has changed. 8         if (mPresentation != null && mPresentation.getDisplay() != presentationDisplay) { 9             Log.i(TAG, "Dismissing presentation because the current route no longer "10                     + "has a presentation display.");11             mPresentation.dismiss();12             mPresentation = null;13         }14 15         // Show a new presentation if needed.16         if (mPresentation == null && presentationDisplay != null) {17             Log.i(TAG, "Showing presentation on display: " + presentationDisplay);18             mPresentation = new DemoPresentation(this, presentationDisplay);19             mPresentation.setOnDismissListener(mOnDismissListener);20             try {21                 mPresentation.show();22             } catch (WindowManager.InvalidDisplayException ex) {23                 Log.w(TAG, "Couldn't show presentation!  Display was removed in "24                         + "the meantime.", ex);25                 mPresentation = null;26             }27         }28 29         // Update the contents playing in this activity.30         updateContents();31     }
1 private void updateContents() { 2         // Show either the content in the main activity or the content in the presentation 3         // along with some descriptive text about what is happening. 4         if (mPresentation != null) { 5             mInfoTextView.setText(getResources().getString( 6                     R.string.presentation_with_media_router_now_playing_remotely, 7                     mPresentation.getDisplay().getName())); 8             mSurfaceView.setVisibility(View.INVISIBLE); 9             mSurfaceView.onPause();10             if (mPaused) {11                 mPresentation.getSurfaceView().onPause();12             } else {13                 mPresentation.getSurfaceView().onResume();14             }15         } else {16             mInfoTextView.setText(getResources().getString(17                     R.string.presentation_with_media_router_now_playing_locally,18                     getWindowManager().getDefaultDisplay().getName()));19             mSurfaceView.setVisibility(View.VISIBLE);20             if (mPaused) {21                 mSurfaceView.onPause();22             } else {23                 mSurfaceView.onResume();24             }25         }26     }

为针对辅助显示进一步优化Presentation的UI,您需要为您的应用或activity指定标签为android:presentationTheme主题。

请留意,连接到用户移动设备的屏幕往往有较大的屏幕尺寸和不同的屏幕密度。由于屏幕特征可能不同,您需要为大型显示设备提供特定优化的资源。如果您需要从Presentation中获取额外的资源,调用getContext().getResources()来获取针对这种显示的资源对象。这样,您的应用就可以根据辅助显示器的尺寸和密度提供最合适的资源了。

关于 Presentation api:

转载于:https://www.cnblogs.com/CharlesGrant/p/4816935.html

你可能感兴趣的文章
【uoj2】 NOI2014—起床困难综合症
查看>>
js return的用法
查看>>
子节点填充父元素除去一固定高度后的剩余高度
查看>>
[原]IOS 后台发送邮件
查看>>
(转)JAVA Calendar详解
查看>>
转: 编码,charset,乱码,unicode,utf-8与net简单释义
查看>>
C#--正则匹配
查看>>
5.30 考试修改+总结
查看>>
BA-设计施工调试流程
查看>>
C#-CLR各版本特点
查看>>
css3背景透明文字不透明
查看>>
《java JDK7 学习笔记》之接口与多态
查看>>
LeetCode 96:Unique Binary Search Trees
查看>>
kernel-char设备的建立
查看>>
DVWA-CSRF
查看>>
ubuntu common software introduction
查看>>
资源相互引用时 需添加 PerformSubstitution=True
查看>>
MapRedece(单表关联)
查看>>
蒲公英App开发之检测新版本
查看>>
【安卓基础】倒计时按钮封装(验证码倒计时按钮)
查看>>