首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >学习|Android中Presentation分屏的简单使用

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

作者头像
Vaccae
发布于 2020-03-26 09:03:53
发布于 2020-03-26 09:03:53
6.5K00
代码可运行
举报
文章被收录于专栏:微卡智享微卡智享
运行总次数:0
代码可运行

分屏异显

做POS销售的朋友应该都知道,现在的很多POS机销售都是两个显示器,对面的那个显示销售的产品和播放广告作用,在Windows中实现其实很简单,直接做一个新的窗体,然后在桌面设置双屏为扩展,显示的时候起始坐标为第一屏的分辨率后开始就可以了,因为现在主要做Android,有可能会用这个方面,所以提前研究了一下,做了个简单的小显示,没作任何优化。

实现效果

微卡智享

Presentation类

微卡智享

Presentation是一个特殊的dialog,它的目的是显示内容到第二屏幕。在Presentation创建的时候关联一个目标设备,确定Presentation要显示在那个设备上,根据这个设备的信息来配置Presentation的context和resources信息。

当Presentation附属的display被移除的话,Presentation就会自动被取消。当创建Presentation的Activity自己处于paused或者resumed,无论Presentation在显示什么内容,该Activity就要关心对Presentation 进行pausing and resuming。

使用流程

微卡智享

#

需要掌握的技能

1

通过DisplayManager获取Display个数,如果大于1就说明有多个屏幕,然后获取自己要定义的display

2

创建类继承自Presentation,在构造函数中传入当前的Activity和display,通过setContentView加载布局文件,所以自己设置xml

3

设置窗口显示类型

4

通过show方法直接调用出来

由上面的步骤可以看出来,使用这个还是非常简单的,我的代码中使用了JzVideo的第三方框架,具体怎么用可以看《学习|Android播放网络视频综合运用

布局文件

主界面中一个EditText,一个Button和一个TextView

第二屏的布局里面一个JzVideostd,一个TextView

secPresentation代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.vaccae.displaydemo

import android.app.Presentation
import android.content.Context
import android.os.Bundle
import android.view.Display
import android.widget.Toast
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.second_display.*

/**
 * 作者:Vaccae
 * 邮箱:3657447@qq.com
 * 创建时间:2020-03-03 13:44
 * 功能模块说明:
 */

class secPresentation : Presentation {

     private lateinit var mContext: Context
    constructor(outerContext: Context?, display: Display?) : super(outerContext, display){
        mContext = outerContext!!
    }

    fun settext(msg: String) {
        prdshow.text = msg + "\r\n"
    }

    fun appendtext(msg: String) {
        prdshow.append(msg + "\r\n")
    }


    fun setvideo(videourl: String, title:String ,picurl: String) {
        jzvideo2.setUp(videourl,title)
        Glide.with(mContext).load(picurl).into(jzvideo2.thumbImageView)
        jzvideo2.startVideo()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.second_display)
    }
}

Activity代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.vaccae.displaydemo

import android.content.Context
import android.content.Intent
import android.hardware.display.DisplayManager
import android.net.Uri
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.Settings
import android.view.Display
import android.view.WindowManager
import android.widget.Toast
import com.bumptech.glide.Glide
import com.danikula.videocache.HttpProxyCacheServer
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {


    private lateinit var proxyCacheServer: HttpProxyCacheServer

    private val videos = arrayOf(
        "http://www.sumsoft.cn/vedio/prnbluetooth.mp4",
        "http://www.sumsoft.cn/vedio/SMPRM.mp4"
    )

    private val pictures = arrayOf(
        "http://www.sumsoft.cn/uploads/allimg/191012/1-191012141244.png",
        "http://www.sumsoft.cn/uploads/191210/1-1912101G154606.png"
    )


    // 屏幕管理类
    private lateinit var mDisplayManager: DisplayManager

    //第二屏类
    private lateinit var secondPresentation: secPresentation

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        proxyCacheServer = HttpProxyCacheServer(this)

        mDisplayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
        val displays = mDisplayManager.displays
        tvshow.text = "屏幕个数" + displays.size + "\r\n"

        displays.forEach { it ->
            tvshow.append("名称:" + it.name + "  ID:" + it.displayId + "\r\n")
        }

        btnset.setOnClickListener {
            if (displays.size > 1) {
                secondPresentation.appendtext(edtinput.text.toString())
            }
        }

        //将最后一个屏幕设置为第二屏
        if (displays.size> 1) {
            try {
                val url=proxyCacheServer.getProxyUrl(videos[1])
                val picurl=pictures[1]

                val seconddisplay = displays[displays?.size!!.minus(1)]
                secondPresentation = secPresentation(this, seconddisplay)
                secondPresentation.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
                secondPresentation.show()
                secondPresentation.setvideo(
                    url,
                    "商盟质量追溯系统",
                    picurl
                )
            } catch (e: Exception) {
                tvshow.append(e.message.toString()+"\r\n")
                Toast.makeText(this,e.message.toString(),Toast.LENGTH_SHORT).show()
            }
        }

    }


}

程序运行起来就是我们开始视频中的效果了

小贴士:如果自己没法外接屏幕的话,手机可以打开开发者选项--绘图--模拟辅助显示设备,自己选一个大小的屏幕也可实现双屏的效果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android制作带悬浮窗控制的录屏程序Demo
最近开发的新版程序初版基本差不多了,所以抽空需要研究一下针对运维方便的辅助工具,其中就有需要做一个WIndows服务器可以远程控制Android客户端的工具,实现的原理大概已经有了个思路了,拆解后每个细节就需要去做技术验证,远程控制首先就需要做到看到对面的图像,预览图像就要使用录屏的功能,所以就有了这个小Demo,当然最终要做的东西是不需要保存本地视频的,这里是为了验证一下是否成功。
Vaccae
2021/10/12
2K0
学习|Android中JetPack中的几个组件简单使用
Android JetPack是一整套的库,工具和指南。可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。
Vaccae
2020/03/31
1.9K0
学习|Android中JetPack中的几个组件简单使用
学习|Android播放网络视频综合运用
随着生活节奏的增加,短视频已经开始慢慢替代公众号软文的情况了,就像我自己发的文章也会经常放一些自己剪辑的效果视频,所以这一篇我们就主要学习一下Andriod的App中怎么进行视频的播放。
Vaccae
2020/01/02
1.2K0
Android前台服务的使用(一)
最近由于工作调整,经常会在各地出差的路上,所以原创相对频率可能会慢些,当然空余时间还是会做为学习的输出,今天这篇主要就是介绍了Android的Service组件,Service做为四大组件之一,虽然没有Activity用的多,但是也会使用到,正好最近也是有个想法,先做的Demo技术验证。
Vaccae
2022/09/28
2.2K0
Android前台服务的使用(一)
关于Android录屏程序在Android10下的修改
上一篇《Android制作带悬浮窗控制的录屏程序Demo》我自己用的虚拟机是Android8的版本,后来用自己的手机无法使用,原因是在Android 10之后录屏等功能要求在前台Service中进行,所以如果你的设备是Android 10以上的 ,上一篇中的录屏就不能用了,所以这篇是专门针对Android 10录屏做的改动。
Vaccae
2021/10/12
2.6K0
学习|Android中SharedPreferences轻量数据存储
有时候我们做的App中不需要本地保存数据,但是有些小的配置参数需要记录,如果中Sqlite就感觉有点太重了,也比较麻烦,所以今天我们来看看Android系统中轻量数据存储SharedPreferences
Vaccae
2020/01/02
7760
Android 的 Presentation 双屏异显,遇到的问题总结
工作中用到了Android的 Presentation 双屏异显,本以为很简单的,结果真实项目中还是遇到了一些问题。
杨永贞
2020/10/26
4.7K8
学习|Android检测并自动下载安装包(Kotlin)
上一篇文章《学习|Android使用TTS语音合成》我们学习了Android用TTS语音合成播放声音,其中因为要播放中文,所以需要下载讯飞的语音合成包,项目应用中的话如果让用户自己寻找并下载太麻烦,所以为了增加用户体验,这一篇我们就研究一下怎么检测是否需要下载安装包,如果需要并自动下载。
Vaccae
2019/12/11
1.5K0
Android内存篇(三)----自动重启APP实现内存兜底策略
前两篇《Android内存篇(一)---使用JVMTI监控应用》《Android内存篇(二)---JVMTI在Anroid8.1下的使用》主要说的是内存监控,本章做为内存的第三篇,主要介绍的是有效解决问题的方法---内存兜底策略。说起内存兜底策略,用人话讲就是在用户不知情的情况下,自动重启APP,这样可以解决软件在触发系统异常前,选择合适的时间重启,使内存回到正常情况。
Vaccae
2022/05/25
1.2K0
Android内存篇(三)----自动重启APP实现内存兜底策略
学习|Android JetPack组件---ORM框架Room的使用
Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。
Vaccae
2020/05/14
1.2K0
瑞芯微RK3576开发板Android14三屏异显开发教程
本文介绍瑞芯微RK3576平台Android14系统三屏异显开发的方法,使用触觉智能EVB7608开发板演示,开发板板载双千兆网口、HDMI2.1、Daul LVDS、HDMI IN、Type C(USB3.2)等丰富的显示、通信与拓展接口,帮助企业提高产品开发效率,降低成本和设计风险。
Industio_触觉智能
2025/09/18
150
瑞芯微RK3576开发板Android14三屏异显开发教程
Android使用LiveEventBus消息实现组件间通讯
最近OpenCV的相关文章基本都是转载的,主要是在开发新的版本产品,所以C#和Android用的多,今天就讲一下Android里的LiveDataBus消息框架。
Vaccae
2021/08/25
2.2K0
学习|Android使用TTS语音合成
所谓活到老,学到老,本篇开始我写的Android代码尽量都转为Android指定的官方语言Kotlin,一是技多不压身,二是Kotlin的语法与我接触的第一门开发语言Delphi有点像,学起来也不太难,所以直接在代码中开始使用才能掌握的更快。
Vaccae
2019/12/11
4.6K0
Android JetPack组件CameraX使用及修改显示图像
好久没用Kotlin写Android的代码了,刚开始写起来还有点生,不过适应了一阵也算是恢复过来了。今天这篇主要是说说Android JepPack组件中CameraX的使用,其实网上也有不少简单的例子,本篇也是参考了网的一篇文章后实现的。主要要说的还是后面,怎么在原有的图像上进行编辑显示,文末有源码的链接。
Vaccae
2020/12/17
2.9K0
Android JetPack组件CameraX使用及修改显示图像
Android画中画(PIP)模式使用
现在手机端各大视频APP基本都有悬浮窗视频模式,我以前文章《Android制作带悬浮窗控制的录屏程序Demo》《Android实现可移动的悬浮窗》有介绍过悬浮窗的使用方式,而到了Android8.0时推出来画中画模式,就是让当前的Activity缩小后显示在其它Activity的上方,使用起来也非常的简单,本篇我们就来试试Android8.0后推出的画中画模式。
Vaccae
2022/12/29
3K0
Android画中画(PIP)模式使用
[Android] 使用MediaProjection截屏
Android5.0以上提供了MediaProjection,方便截屏录屏等功能。
wOw
2018/09/18
11.7K0
Android MVI框架搭建与使用
  有一段时间没有去写过框架了,最近新的框架MVI,其实出来有一段时间了,只不过大部分项目还没有切换过去,对于公司的老项目来说,之前的MVC、MVP也能用,没有替换的必要,而对于新建的项目来说还是可以替换成功MVVM、MVI等框架的。本文完成后的效果图:
晨曦_LLW
2023/02/26
4.3K2
Android MVI框架搭建与使用
Android使用ViewBinding
在我们的开发过程中,需要获取XML布局文件中的ViewId,以便其赋值显示,我们习惯使用findViewById进行操作,可这样会导致很多的模版代码出现。
码客说
2023/12/30
1.1K0
学习|Android中两个PhotoView对比及Glide的扩展使用
PhotoView是在Android一个比较常用的图片预览的开源库,在搜索中也发现了两个不同的PhotoView,分别是com.github.chrisbanes:PhotoView:2.3.0和com.bm.photoview:library:1.4.1,从使用对比的效果来说,个人更倾向于com.bm.photoview,这个除了有上面的那个的功能外,还可以加入图像的旋转。
Vaccae
2020/01/15
4K0
学习|Android中两个PhotoView对比及Glide的扩展使用
安卓软件开发:Java和Kotlin实现首页壁纸的手势切换功能
本项目是通过左右滑动手势切换首页壁纸,为车机应用用户提供灵活、便捷的壁纸定制体验。这功能提升了应用的互动性,增强了用户对应用的操作感。
Nimyears
2024/09/18
7990
相关推荐
Android制作带悬浮窗控制的录屏程序Demo
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验