本文介绍: 双屏异显可以用在各种窗口服务系统,信息发布系统,如收银机,广告机等。记录一下使用方法~Android系统版本:Android 12jdk-18.0.2安卓平板接一个HDMI显示器,显示器为副屏~
前言
双屏异显可以用在各种窗口服务系统,信息发布系统,如收银机,广告机等。记录一下使用方法~
一、环境介绍
系统版本:Android 7.1 Android 12
Android Studio Electric Eel | 2022.1.1jdk-18.0.2
二、设备介绍
使用场景
三、编写代码
1.添加权限
<!-- 申请悬浮权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
//启动Activity让用户授权
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 1000);
return;
}
}
2.创建副屏DisplayPresentation类
继承Presentation, Presentation其实就是一个Dialog
DisplayPresentation简单实现了一个全屏的webview,用来加载网页~
代码如下:
package com.armt.sdktest_armt.displays;
import android.app.Presentation;
import android.content.Context;
import android.net.http.SslError;
import android.os.Bundle;
import android.view.Display;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.armt.sdktest_armt.R;
public class DisplayPresentation extends Presentation {
public WebView webView;
public DisplayPresentation(Context outerContext, Display display) {
super(outerContext, display);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_presentation);
//此处URI可能失效
addWeb("https://haokan.baidu.com/v?vid=3742103441181501443&");
}
public void setVideoUrl(String url) {
webView.loadUrl(url);
}
public void addWeb(String url) {
webView = findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setSupportZoom(true);
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
// 设置支持JavaScript激活,可用等
webSettings.setJavaScriptEnabled(true);
/*
* 设置自身浏览器,注意:可用把WebView理解为浏览器
* 设置setWebViewClient(new WebViewClient());后,手机就不会跳转其他的浏览器
*/
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// 注掉 super
// super.onReceivedSslError(view, handler, error);
// 接受所有网站的证书,忽略SSL错误,执行访问网页,解决网页空白的问题
handler.proceed();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
webView.loadUrl(url);
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
3.创建PresentationActivity启动类
1.获取屏幕管理类 2.获取副屏display数据 3.创建副屏界面DisplayPresentation 4.show()显示副屏 代码如下(示例):
//屏幕管理类
DisplayManager mDisplayManager = (DisplayManager) this.getSystemService(Context.DISPLAY_SERVICE);
//获取副屏
Display[] presentationDisplays = mDisplayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
if (presentationDisplays.length > 0) {
mPresentation = new DisplayPresentation(this, presentationDisplays[presentationDisplays.length - 1]);
}
//获取全部显示屏
//Display[] displays = mDisplayManager.getDisplays();
//mPresentation = new DisplayPresentation(this, displays[displays.length - 1]);
mPresentation.show();
//另一种方法
/*MediaRouter mediaRouter = (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);
MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
if (route != null) {
Display presentationDisplay = route.getPresentationDisplay();
if (presentationDisplay != null) {
mPresentation = new DisplayPresentation(this, presentationDisplay);
mPresentation.show();
}
}
*/
4.主屏操控副屏
获取到DisplayPresentation对象后, 可以在主屏界面修改变更数据,或者使用EventBus等框架传递数据也行
mPresentation.setVideoUrl("https://www.qq.com");
public void setVideoUrl(String url) {
webView.loadUrl(url);
}
5.完整代码链接:
在displays包下~
原文地址:https://blog.csdn.net/qaz96801/article/details/130368051
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_8169.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。