Android -- 双屏异显之方法一

ops/2024/12/22 17:37:37/

Android – 双屏异显之方法一:MediaRouter

PS:
1. 部分主板可能不支持,得验证;
2. 副屏输出可以不用连接显示屏也能正常后台运行;
3. 主屏Activity内控制副屏;
4. 副屏截图命令:screencap -p -d 1 <path_name>;(-d 1 副屏截屏)

使用方法:

//主屏activity内
private MediaRouter mMediaRouter;
private SecondDisplay secondDisplay;//控制副屏显隐
public void onSecondChange(View view) {if (secondDisplay == null) {showSecondScreen();} else {closeSecondScreen();}
}
//====================================
private void showSecondScreen() {if (secondDisplay != null) {return;}mMediaRouter = (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);updatePresentation();
}private void closeSecondScreen() {if (secondDisplay != null) {secondDisplay.release();secondDisplay.dismiss();secondDisplay = null;}
}private void updatePresentation() {// Get the current route and its presentation display.MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);Display presentationDisplay = route != null ? route.getPresentationDisplay() : null;// Dismiss the current presentation if the display has changed.if (secondDisplay != null && secondDisplay.getDisplay() != presentationDisplay) {secondDisplay.dismiss();secondDisplay = null;}// Show a new presentation if needed.if (secondDisplay == null && presentationDisplay != null) {secondDisplay = new SecondDisplay(this, presentationDisplay);secondDisplay.setOnDismissListener(mOnDismissListener);try {secondDisplay.show();} catch (WindowManager.InvalidDisplayException ex) {secondDisplay = null;ex.printStackTrace();}}
}//副屏关闭监听
private final DialogInterface.OnDismissListener mOnDismissListener = new DialogInterface.OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {if (dialog == secondDisplay) {secondDisplay = null;}}
};

SecondDisplay.java (副屏类)

//主要继承Presentation类
public class SecondDisplay extends Presentation {private static final String TAG = "SecondDisplay";private Context mContext;//构造函数public SecondDisplay(Context outerContext, Display display) {super(outerContext, display);this.mContext = outerContext;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//副屏布局,与activity内一样setContentView(R.layout.layout_second);initUI();}private void initUI() {//绑定控件}public void release() {//关闭页面前注销资源}
}

http://www.ppmy.cn/ops/144080.html

相关文章

apache-tomcat-6.0.44.exe Win10

apache-tomcat-6.0.44.exe Win10

vitepress-打包SyntaxError: Element is missing end tag.

一、vitepress打包编译报错Element is missing end tag. 背景&#xff1a; 新增了一些笔记准备上传到git仓库&#xff0c;持续集成部署的时候&#xff0c;控制台报错了&#xff0c;错误信息如下&#xff1a; SyntaxError: Element is missing end tag. 仔细看了下控制台几乎没啥…

【Verilog】实验八 有限状态机设计

一、实验目的 1. 掌握有限状态机原理和设计方法。 2. 掌握ModelSim和VIVADO工具软件。 3. 掌握基本的测试代码编写和FPGA开发板使用方法。 二、实验环境 1. 装有ModelSim和VIVADO的计算机。 2. Sword实验系统。 三、实验原理 有限状态机是时序电路的通用模型&#xff0…

HTML中的Vue3解析!

#Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架。它在 HTML 中发挥着重要的作用&#xff0c;可以让开发者轻松地创建交互式的网页应用。与 HTML 结合时&#xff0c;Vue 3 通过自定义指令、组件等方式增强了 HTML 的功能。# 一、vue的概述 Vue 采用了双向数据绑定机制…

【CSS in Depth 2 精译_084】第 14 章:CSS 蒙版、形状与剪切概述 + 14.1:CSS 滤镜

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 ✔️ 14.1.1 滤镜的类型 ✔️14.1.2 背景滤镜 ✔️ 14.2 蒙版 文章目录 第 14 章 蒙版、形状与剪切 Masks, shapes, and…

单节点calico性能优化

在单节点上部署calicov3273后&#xff0c;发现资源占用 修改calico以下配置是资源消耗降低 1、因为是单节点&#xff0c;没有跨节点pod网段组网需要&#xff0c;禁用overlay方式网络(ipip&#xff0c;vxlan),使用route方式网络 配置calico-node的环境变量 CALICO_IPV4POOL_I…

23 go语言(golang) - gin框架安装及使用(四)

五、跨域资源共享 跨域资源共享&#xff08;CORS&#xff0c;Cross-Origin Resource Sharing&#xff09;是一种机制&#xff0c;它允许来自不同源的请求访问资源。默认情况下&#xff0c;浏览器出于安全原因会阻止跨域 HTTP 请求。Gin 框架本身没有内置的 CORS 支持&#xff…

SQL server学习07-查询数据表中的数据(下)

目录 一&#xff0c;自连接查询 二&#xff0c;多表查询 三&#xff0c;关系代数运算 1&#xff0c;笛卡尔乘积运算 1&#xff09;交叉连接 2&#xff0c;连接运算 2&#xff09;内连接 四&#xff0c;外连接 1&#xff0c;左外连接 2&#xff0c;右外连接 3&…