Android双屏异显另辟蹊径---minui的移植
minui介绍
minui是Android自带的一个画图工具,可以绘制一些简单的图形和图像,显示png图片,显示字符串等。
在Android设备中譬如,关机充电动画,自动测试程序,recovery模式界面等都是用minui绘制界面,进行人机交互,完成一些必要的功能。其优点是在不启动Android surfaceflinger等主要绘图进程的情况下,实现基于基本Linux显示框架下的显示功能,起到开机时间短,节约电量等功能。
下面介绍一下通过仿照关机充电应用程序,写的一个小屏显示进程。Android默认支持一个主屏,Android N以后退出双屏异显的接口api,但是这里并不是通过创建两个displaydevice来实现双屏显示而是通过另外启动一个进程,使用minui将第二个屏的显示数据推送到第二个屏上(小屏,也叫副屏)。移植minui的工作就变得不可绕开了。
minui代码分析
从关机充电应用程序那里复制一套minui的代码:
minui的画图和显示接口在另外一篇文章中会有介绍:https://blog.csdn.net/eliot_shao/article/details/78597522
下面也会有一个实例来应用。
minui移植必要代码分析:
graphics.c
minui驱动接口有两个,一个使用adf框架的显示接口,一个是使用framebuffer的显示框架,因为对framebuffer了解比较多,遂使用framebuffer的方式来实现驱动。
graphics_fbdev.c
这里会打开驱动层对应的framebuffer节点。
所以我们下一步是创建一个framebuffer子系统节点和必要的信息。
在驱动层创建一个framebuffer驱动,可以仿照其他显示驱动实例。
framebuffer驱动实现
framebuffer驱动主要内容:
1、
struct fb_info *info;
info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
2、
size = PAGE_ALIGN(size);
mem = vmalloc_32(size);
3、info->screen_base = (char __iomem *)videomemory;
vfb_fix.smem_start = (unsigned long) videomemory;
vfb_fix.smem_len = videomemorysize;
4、 info->fix = vfb_fix;
info->flags = FBINFO_FLAG_DEFAULT;
retval = register_framebuffer(info);
5、
驱动的主要内容包括framebuffer申请,一块连续的虚拟内存的申请,fb_info的填充,注册framebuffer,重写fb_ops的blank函数(SPI驱动这里略过)。
minui应用测试程序及效果
现在minui的驱动部分已经写好了,编译进去执行adb可以看到对应的/dev/graphics/fb0(fb1)的接口,下面写一个简单的minui应用程序测试一下:
显示效果:
为了能正常编译minui应用程序,需要修改android.mk文件。
如下:
总结
至此,minui从应用到显示打通,可以显示自定义界面,和主屏互不干扰,实现双屏异显。但是这种显示只能显示较为简单的界面,或者第二人机交互界面 在一些需要双显示的系统中解决一些重要的问题。
Android双屏异显另辟蹊径---minui的移植相关推荐
- android双屏异显获取副屏参数,Android 双屏 异显 插件 双屏(副屏)异显,主副屏通讯...
更新记录 1.2.0(2021-04-12) 优化副屏视频播放功能. 1.1.0(2020-07-01) 新增,视频列表播放,可以在副屏播放一些广告视频等等. 查看更多 平台兼容性 Android i ...
- Android 双屏异显(Presentation) 开发,将第二个页面投屏到副屏上
1. 背景 最近开发的一个项目,有两个屏幕,需要将第二个页面投屏到副屏上, 这就需要用到Android的双屏异显(Presentation)技术了,研究了一下,这里做下笔记. 我们那个副屏是一块汽车的 ...
- 【Android双屏异显】如何真正的实现Android双屏异显
最近在做一个Android双屏异显的项目,要实现一台Android设备通过HDMI连接两个显示器,然后在一个App中同时显示两个不同的画面. 标题实际上Android并不存在真正的像Windows一样 ...
- Android双屏异显的实现
概述 Android实现双屏异显的实现方式有2种. 方式一:在Android4.2及以上平台上,按照标准Android SDK提供的API,使用Presentation类,将一个APP的相关内容显示到 ...
- Android 双屏异显(兼容android8)
1.双屏判断(是否支持双屏异显) 2.权限申请(android 6 以后需要申请权限) 3.客显实例化 (客显布局) public void initDiffDisplay() {try {Displ ...
- Android双屏异显
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.设置Simulate secondary displays 二.实现副屏异显 三.实现效果 Andr ...
- Android 双屏异显
背景: 日常生活中,有时候会遇到 Android 设备连接两个屏幕进行显示的问题,比如酒店登记信息时,一个屏幕用于员工操作,一个屏幕显示相关信息供顾客查看.这里就涉及到 Android 的双屏异显的问 ...
- android 分屏投影,Android 双屏异显实现的三种方式
在各种产品脑洞大开的时代,需求也是日益新异,笔者最近开发了一套双屏异显app.现在做一些总结 1.双屏异显第一种实现方式(官方提供的Presentation) Android 提供了一个叫 Prese ...
- 【转载】Android 双屏异显方案
一.技术的背景 随着电梯广告传媒行业的飞速发展,双屏广告机应运而生,客户可以根据自己的需求,制作两个屏幕的内容,分别播放适合屏幕显示方式播放的内容,如上面播放视频,下面播放图片,使得宣传的效果多样化. ...
最新文章
- 没学过python、但是还是有公司要-学习python 基础都会了 为什么还是做不出项目呢?...
- python for循环结构_循环结构-for循环
- Android的BUG(四) - Android app的卡死问题
- springboot项目中mybatis实现数据的基本查询
- django 1.8 官方文档翻译:13-3 日志
- 深入理解Android View(转)
- 1093 字符串A+B (20分)
- matlab 不确定度计算器,A类贝塞尔不确定度计算器
- 苹果iPod设计及商业操作内幕
- android 360 悬浮窗,悬浮窗的实现(如360悬浮窗效果)
- symbian的字体包
- springboot上传文件(前端传来的是base64字符串形式)
- 中文语音合成软件Ekho(余音)的使用教程
- 计算机bios所以的英文翻译,bios界面翻译对照 主板BIOS界面全英文翻译介绍
- springboot微信点餐系统的设计与实现毕业设计源码221541
- kafka 使用及学习过程中的爬坑记录
- Excel如何按行间隔配置背景颜色
- WLW离线编辑器的安装与使用
- OAI网络切片三切片配置
- 使用京东云免费云主机搭建CentOS