这篇文章主要给大家介绍了关于Android如何实现设备的异显功能的相关资料,这篇文章通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友可以参考下
前言
大家都知道无线投屏或者有线投屏的功能,但应该很少有人知道安卓中的异显功能? 这篇文章是为了让大家对异显有初步的认识,以及怎么实现简单的异显。
一、什么是异显
无线投屏或者有线投屏的时候,安卓设备的画面会原封不动的投影在显示器上,这就是投屏。
而异显,则是安卓设备和显示器的画面分开显示,比如安卓设备上在聊天,显示器上还可以在播放电影,是不是和多窗口的感觉有点像。
当然,安卓设备需要支持VGA/HDMI显示。 哪些设备支持呢,我在某商家店面上发现只有部分设备是支持的。
另外有部分安卓设备同时支持投屏和办公两种模式,有部分安卓设置则只支持投屏。 某品牌手机的办公模式
二、实现步骤
2.1 权限
- 静态权限
在实现投屏功能之前,应该去允许操作投屏的权限,它的权限实际上是显示系统窗口的权限,在配置文件中
<!-- 显示系统窗口权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<!-- 在 屏幕最顶部显示-->
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
- 动态权限
if (Build.VERSION.SDK_INT >= 23) {
if (!Settings.canDrawOverlays(MainActivity.this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 10);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 10) {
if (Build.VERSION.SDK_INT >= 23) {
if (!Settings.canDrawOverlays(this)) {
// SYSTEM_ALERT_WINDOW permission not granted...
Toast.makeText(MainActivity.this, "not granted", Toast.LENGTH_SHORT);
}
}
}
super.onActivityResult(requestCode, resultCode, data);
}
为什么需要这些权限,因为副屏的主要类Presentation是继承与Dialog的
2.2 定义分屏的界面
public class DifferentDisplay extends Presentation {
public DifferentDisplay(Context outerContext, Display display) {
super(outerContext, display);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.diffrentdisplay);
}
public void setText(String text) {
TextView textView = findViewById(R.id.tv_test);
textView.setText(text);
}
}
界面布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:background="@color/purple_200"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="异显"
android:textSize="50sp" />
</RelativeLayout>
2.3 操作分屏界面
先放代码再来说明
public class MainActivity extends AppCompatActivity {
final String TAG = "MainActivity";
DifferentDisplay mPresentation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 双屏显示
DisplayManager mDisplayManager; //屏幕管理类
Display[] displays;// 屏幕数组
mDisplayManager = (DisplayManager) MainActivity.this.getSystemService(Context.DISPLAY_SERVICE);
displays = mDisplayManager.getDisplays(); // 得到显示器数组
if (displays.length == 0) {
Log.d(TAG, "无显示屏");
return;
}
mPresentation = new DifferentDisplay(getApplicationContext(), displays[1]);//displays[1]是副屏
// 8.0 需要替换为 TYPE_APPLICATION_OVERLAY mPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mPresentation.show();
}
int index = 1;
public void Test(View view) {
if (mPresentation != null)
mPresentation.setText(++index + "点击");
}
}
Display[] displays
是获取的屏幕的个数,包括安卓设备自身的屏幕。 比如new DifferentDisplay(getApplicationContext(), displays[1])
操作的就是第一块副屏。
另外有个权限问题
mPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
上诉代码在6.0及以上是可以的(未验证),但在8.0以上需要这样使用
8.0以上需要将:WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
替换为:WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
总结
到此这篇关于Android如何实现设备的异显功能的文章就介绍到这了,更多相关Android实现设备异显功能内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Android如何实现设备的异显功能详解


基础教程推荐
- Flutter进阶之实现动画效果(三) 2022-10-28
- Android开发Compose集成高德地图实例 2023-06-15
- IOS获取系统相册中照片的示例代码 2023-01-03
- iOS Crash常规跟踪方法及Bugly集成运用详细介绍 2023-01-18
- iOS开发 全机型适配解决方法 2023-01-14
- iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi 2023-06-18
- Android实现短信验证码输入框 2023-04-29
- Android Compose自定义TextField实现自定义的输入框 2023-05-13
- iOS开发使用XML解析网络数据 2022-11-12
- MVVMLight项目Model View结构及全局视图模型注入器 2023-05-07