前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习|Android中Presentation分屏的简单使用

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

作者头像
Vaccae
发布2020-03-26 17:03:53
6.1K0
发布2020-03-26 17:03:53
举报
文章被收录于专栏:微卡智享

分屏异显

做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
复制
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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 布局文件
  • secPresentation代码
  • Activity代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档