跳出手机的Dialog---Presentation

Presentation实现双屏显示的关键步骤 务必使用 Presentation 的 Context (通过 getContext()) 来加载副屏布局和资源,以确保适配副屏的尺寸和密度。UI 适配:副屏的尺寸和分辨率可能与主屏不同,建议为副屏创建独立的布局文件,并考虑使用尺寸限定符(如 sw600dp)进行优化。// 通常第一个可用的副屏。// infoText.setText("这是在副屏上显示的内容");在主屏上使用普通Dialog,在副屏上使用你创建的Presentation实例。// 如果找到副屏,则在副屏上显示Presentation。 阅读详情

跳出手机的Dialog—Presentation

本文原创,转载请经过本人准许。

写在前面:

Presentation 是 what?
也许你刚看到标题的时候,会默默把这个单词扔到翻译工具里面,就像老大最开始跟我提起这个单词的时候一样。

容我想想

Presentation是说明书?
Presentation是一个颁奖典礼?
Presentation还是某卖药公司UE总监让所有IT人尴尬癌尽犯的PPT Presentation?

公司做的是智能硬件方向,国内有关Presentation资料几乎是空白的,所以我的研究更多参考了Presentation官方文档和一些英文资料。如果各位看官有什么建议,一定要记得补充。

presentation的定义

好吧,既然上面这些都不是,Presentation是一个类,我们翻过太平洋的墙,来看看Presentation的定义。

A presentation is a special kind of dialog whose purpose is to present content on a secondary display.

我们仅仅先来看这一句定义,因为当你对一个东西完全不了解时候,知道的越多,越会影响你的判断。

翻译下:presentation 是一种特殊的 dialog ,目的是为了在辅助屏幕上展示不同的内容。

在这句话上,我收集到了两个关键的信息:

  • presentation 是一个 dialog
    根据生物遗传学的角度,presentation 无论被描述成什么天花乱坠的模样,它也是一个dialog。

  • presentation 目的是显示在辅助屏幕上

进一步思考下,也就是说:

我可以拿着我自己的手机,点击一个按钮,然后在你的电脑上或者手机上,弹出一个自定义的Dialog(脑补一下恶作剧场景O(∩_∩)O)?

这与我们之前,通过一些软件,将手机屏幕同步到电脑上,区别又在哪里呢?

相信很多人都能立刻想明白,区别在于:展示不同内容

通过软件同步到电脑,展示的东西始终与我的手机屏幕相同。

而利用 presentation 我可以自由的展示我想展示的内容,因为它是一个Dialog,是局部可控的。

寻找并投影到辅助屏幕

产品经理找到我,向我提出了以下几个疑问:

现在手里有一部Android手机

能否连接以下几种设备

  • 另一部Android手机

  • 笔记本电脑

  • 智能电视

  • 小米盒子等

并且连接之后,利用presentation展示不同内容。

我乍一看这几个设备,感觉都没问题呀。可是当我拿着手机挨个尝试,几次失败,并且耐心分析之后,发现了问题。

首先Presentation是Android 4.2引出的,与之同时Android 4.2 还支持 Miracast 影像传输协议。所以它俩一定是有联系的。

Miracast

Miracast简介

Miracast是一种基于WIFI的传输协议,Android 4.2以上的手机、Win8电脑、智能电视、盒子几乎都是支持它的。

不过Miracast它将设备分为发送端和接收端
发送端有手机、电脑。
接收端有智能电视、电视盒子。

所以,手机连手机或电脑展示Presentation,是行不通的。手机作为发射端,去寻找智能电视和盒子才是正解。

Presentation

终于弄明白了要寻找的设备是怎样的,建立连接之前,参考官方文档的样例,我们先把Presentation给搭建好。

Presentation类

可以看到,和Activity一样,可以通过setContentView来给Presentation设置一个布局。自然布局里可以有各种各样的组件,还可以有像GLSurfaceView、SurfaceView 这种重量级的组件,来显示炫酷的动画。这里我们就仅仅写一个TextView,展示一行“show a Presentation”文字。

值得一提的是,在Presentation中的getContext得到的context与它依附的Activity的context是不同的,Presentation的context是目标屏幕属性的context,包含着辅助屏幕的属性信息。

获取辅助屏幕

获取辅助屏幕有两种方式

  • MediaRouter

  • DisplayManager

MediaRouter

利用MediaRouter的API寻找周围设备是一种最简单的方式了,它会直接绑定周围最合适的设备。就相当于你用谷歌搜索直接点击“手气不错”

代码如下:

点击按钮,展示Presentation

可以看到在Presentation的构造中,传入了一个display,这就是搜索到的那个设备

先来测试一下,Android 4.2的手机在开发中选项中,都有模拟辅助屏幕的功能,我们选择一个分辨率,打开它,模拟一个外部的屏幕。

打开模拟辅助屏幕

默认辅助屏幕是同步手机屏幕的,打开之后,进入测试app,点击按钮:

这里写图片描述

注意这可不是一个Dialog,而是我们把内容展示在了一个模拟的辅助屏幕上,回头看看标题,是不是就实现了呢?

DisplayManager

第二种搜索设备的方法是DisplayManager,他可以搜索周围所有可用的display,产生一个display数组,然后你就可以选择合适的设备进行展示了。

代码如下:

DisplayManager

代码还是挺简单的,搜索到周围所有可用设备之后,展示到ListView上,点击条目,在APP上和Presentataion上分别跑一个秒表,看看延时性如何,截图如下。

DisplayManager

可以看到,搜索到的设备名称是 叠加视图#1 ,点击条目之后两个秒表也分别跑了起来。

总结:

上面对Presentation进行了一个简略的介绍,因为相信大家如果做的不是智能硬件方向,基本上不会遇到这个需求。关于Activity对Presentation的管理方式,官方文档的有两个Demo可以参考,需要时可以去查看。

写在后面:

周末在连接智能电视测试时,跑秒表发现延时还是很大的,所以目前考虑是否可以用采用HDMI有线连接的方式来减小延时。
关于Presentation资料比较少,欢迎大家一同交流

Android多屏显示——Presentation 要了解 API 的具体调用,推荐先查看官方的文档:Presentation文档Android 从4.2开始支持双屏显示,开发时需 minSdkVersion >= 17。Android 连接两个屏幕时,自动分配主屏和副屏,主屏显示正常的 Activity 界面,副屏通过创建 Presentation 类来实现。通过查看 Presentation 继承关系可知,Presentation 继承自 Dialog,创建的时候需要遵循 Dialog 相关要求。 阅读详情

相关推荐

Presentation与自定义Dialog的使用

原文链接地址:http://www.cnblogs.com/xiaoshubao/p/5630480.html

双屏异显Presentation和Dialog获取LifecycleOwner

注:由于Presentation是基于Dialog的,所以这个也可以用于Dialog(把构造函数的Presentation类型修改为Dialog类型即可)1.由于Presentation是基于Dialog的,所以只能通过实现自定义LifecycleOwner。

savet的博客 482

Dialog演示

dialog的使用演示,代码简单易懂,适合新手,

Android | 说说Presentation

目录 1、什么是Presentation 2、获取屏幕 2.1 使用media router来获取可以显示presentation的屏幕 2.2 通过Display Manager来获取presentation display 3、Presentation说明 3.1 继承的常量 3.2 构造函数 3.3 公共方法 3.4 Protected 方法 4、其他 1、什么是Pre...

明朗晨光的专栏 8109

Globus 数据下载

Globus 大数据下载流程~

weixin_43978558的博客 6627

博图V16与840D sl数控系统PLC编程实战指南

本文为西门子840D sl数控系统的PLC编程实战指南,详细介绍了如何使用博图V16软件配置编程环境。内容涵盖从项目创建、核心程序块(如DB、FB)解析到OB1主循环编程的完整流程,并提供了高级调试技巧与联调避坑指南,帮助工程师快速上手并高效完成系统集成与逻辑控制。

weixin_29193259的博客 527

modalPresentationStyle实现特殊的弹出效果

要实现这种弹出框使周围成灰色并且不可触摸很简单,只需要三行代码: controller.modalPresentationStyle=UIModalPresentationFormSheet; [self presentModalViewController:controller animated:YES]; [controller release]; controller...

lizaochengwen的专栏 302

simulink中无迹卡尔曼(UKF)模块使用

simulink的UKF模块简单说明

qq_41059950的博客 2821

Android Presentation是什么

跳出手机的Dialog--Presentation presentation的定义  A presentation is a special kind of dialog whose purpose is to present content on a secondary display. 我们仅仅先来看这一句定义,因为当你对一个东西完全不了解时候,知道的越多,越会影响你

明潮的BLOG 1万+

声纹识别初学

最近开始关注声纹识别技术,发现国内做这个的确实没有几家,而且大多重点推声纹认证,用在公安司法金融领域,而我却关注文本无关的声纹识别,这里把我搜到的一点资料汇总在此. 发现njustzj001的专栏有两篇文章适合入门的我,贴下链接: 综述:  http://blog.youkuaiyun.com/xmu_jupiter/article/details/47209961 PLDA解释:  http://

u013452331的专栏 2759

学Simulink--基础光伏储能场景实例:基于Simulink的光储微电网主从控制策略仿真

摘要:本文详细介绍基于Simulink的光储微电网主从控制策略仿真方法。通过"储能V/f控制+光伏PQ控制"架构,实现孤岛运行时电压频率稳定和功率平衡。文章包含系统建模步骤、核心控制算法实现(附MATLAB代码)、三种典型工况仿真测试(稳态、光伏突变、负荷波动),结果显示系统满足电压偏差<±2.5%、频率偏差<±0.3%、动态响应<1s的性能要求。最后提出双主冗余、分层控制等优化方向,为光储微电网控制提供完整仿真解决方案。

amy_mhd的博客 74

Android Dialog弹出对话框整理总结

对话框的概念: 对话框是提示用户作出决定,输入额外信息或显示某种状态的小窗口,通常不会填充整个屏幕,用于进行一些额外交互。 对话框的特点: 1, 当前界面弹出的小窗口. 2, 用户要与它进行交互, 可以接收用户输入的信息, 也可以反馈信息给用户.     Dialog类是dialog对话框的基类,Dialog基类中并没有定义界面,所以如果使用dialog类设置弹出框,需要使用xml自定义...

残风乱了温柔的博客 1万+

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

一、本文介绍 本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。MobileNet V4通过整合UIB、Mobile MQA以及优化的NAS策略,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中MNv4-Conv-S、MNv4-Conv-M、MNv4-Conv-L、MNv4-Hybrid-M和MNv4-Hybrid-L五种模型,以满足不同的需求。 模型 参数量 计算量 推理速度 YOLOv11m 20.0M 67.6GFLOPs 3.5ms

Limiiiing的博客 4458

学习|Android中Presentation分屏的简单使用

学更好的别人,做更好的自己。——《微卡智享》本文长度为3862字,预计阅读9分钟分屏异显做POS销售的朋友应该都知道,现在的很多POS机销售都是两个显示器,对面的那个显示销售的产品和播放...

Vaccae的博客 1388

ARFoundation系列讲解-教程目录

一、教程目录 ARFoundation快速入门-01简介 ARFoundation快速入门-02环境搭建 ARFoundation快速入门-03环境配置之iOS ARFoundation快速入门-04环境配置之Android ARFoundation快速入门-05ARKit设备支持列表 ARFoundation快速入门-06ARCore设备支持列表 ARFoundation快速入门-07检查设备支持 ARFoundation快速入门-08平面检..........

a451319296的博客 3万+

OpenAI Error: 403 Country, region, or territory not supported [Python]

从OpenAI的API服务中获取数据时,由于你所在的国家、地区或领土不被支持,因此请求被拒绝了

suiusoar 5668

Android 双屏开发 Presentation 的使用教程

使用Presentation 开发双屏 可以把Presentation 理解为一个特殊的Dialog 如果不知道Presentation 的使用,就简单的理解为类似自定义Dialog 下面来简单的演示下Presentation的使用 随便取一个名字ScreenPresentation 继承Presentation 由于是要展示效果,所以布局呢就随便添加了一个背景颜色,其余的什么都没写 ...

小牧在一直在学习,在前进的道路上大家一起学习,进步。 3997

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android-Presentation双屏异显-一看就懂篇

绪论 随着用户的需求增多,特别是对于一些Android平板电脑以及其他的一些Android智能设备可能有多个屏幕,用户不仅想要在主屏幕上显示内容,同样在第二屏幕上也要显示想要的内容,这样可以达到更好的体验效果。Google也是不负众望在Android4.2版本以后提供了Presentation类,可以轻松实现在两块屏幕上同时显示不同的内容。 Presentation是一个特殊的dialog,它的目的是显示内容到第二屏幕。在Presentation创建的时候关联一个目标设备,确定Presentation要

Jason_Lee155的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android presentation实现双屏异显

android双屏是克隆模式,如果要在第二屏幕显示不同内容,需要自定义一个Presentation类 1.设置权限 <!-- 显示系统窗口权限 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <!-- 在 屏幕最顶部显示addview--> <

小时光的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android presentation

对于双屏异显(lcd 和 hdmi 的双屏异显),android框架已经支持,但是底层接口功能还是要自己去实现,且需要底层驱动支持。 使用presentation 去画第二个display就好了。 1 MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);...

weixin_33725126的博客 512

Android 双屏异显自适应Dialog

一、前言Android 多屏互联的时代,必然会出现多屏连接的问题,通常意义上的多屏连接包括HDMI/USB、WifiDisplay,除此之外Android 还有OverlayDisplay和VirtualDisplay,其中VirtualDisplay相比不少人录屏的时候都会用到,在Android中他们都是Display,除了物理屏幕,你在OverlayDisplay和VirtualDisplay...

Android技术之家 1077

android 双屏异显 客显图片播放与视频播放切换

主要是继承自Presentation,实现是借鉴另一位大牛的代码,自己做了适当的扩张,主要的逻辑是在开启的服务里面,这里不罗嗦,上代码,最后回帖上源码 MediaPresentation 里面主要是实现客显示的布局,一个是视频的布局,一个是图片的布局,具体实现源码可以看到,只贴例子:这个是视频的客显布局 public class MediaPresentation extends Pre

u012922981的专栏 4352

Android 硬解码MediaCodec配合SurfaceView的踏坑之旅

一 前言最近在看一些Android硬解码的内容,顺便写了一个硬解码demo,简直就是踏坑之旅。使用Android自带的MediaCodec会有很多问题,动不动就卡死甚至crash。废话少说直接上代码,最后会将踩过的坑列觉出来并给出fix的办法二 demo1 初始化 首先 使用MediaCodec的静态方法创建一个解码器MediaCodec,记住是解码器,后面的mMimeType的参数就是解码视

u012521570的博客 3万+

记一次安卓双屏异显(presentation )开发遇到的坑和解决问题

1、双屏异显数据同步处理 用viewmodel加livedata方法实现两个屏幕数据的同步 2、副屏无法弹出dialog、toast和软键盘 1、自己写了一个toast组件,相当于一个view展示在界面上,过一段事件自动隐藏 2、dialog也可以这样,也可以采用弹出dialog时先关闭副屏(因为副屏presentation其实也是一个dialog所以可以通过dismiss方法关闭)dialog关闭时再展示。 3、无法弹出软键盘问题没找到解决办法也是通过一个取巧的办法去解决的,通过弹出dialog

qq_40667603的博客 3559

Android Presentation多屏显示

多屏显示

zjy764219923的专栏 1615
上一篇: 3分钟傻瓜式反编译一个APP
下一篇: Android微信自动回复功能
MeloDev
博客等级 码龄11年 93粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值