这篇文章主要讲解了“Android怎么实现设备的异显功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android怎么实现设备的异显功能”吧!

一、什么是异显

无线投屏或者有线投屏的时候,安卓设备的画面会原封不动的投影在显示器上,这就是投屏。

而异显,则是安卓设备和显示器的画面分开显示,比如安卓设备上在聊天,显示器上还可以在播放电影,是不是和多窗口的感觉有点像。

当然,安卓设备需要支持VGA/HDMI显示。 哪些设备支持呢,我在某商家店面上发现只有部分设备是支持的。

另外有部分安卓设备同时支持投屏和办公两种模式,有部分安卓设置则只支持投屏。

二、实现步骤2.1 权限

静态权限

在实现投屏功能之前,应该去允许操作投屏的权限,它的权限实际上是显示系统窗口的权限,在配置文件中

<!--显示系统窗口权限--><uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/><!--在屏幕最顶部显示--><uses-permissionandroid:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>

动态权限

if(Build.VERSION.SDK_INT>=23){if(!Settings.canDrawOverlays(MainActivity.this)){Intentintent=newIntent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse("package:"+getPackageName()));startActivityForResult(intent,10);}}@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){if(requestCode==10){if(Build.VERSION.SDK_INT>=23){if(!Settings.canDrawOverlays(this)){//SYSTEM_ALERT_WINDOWpermissionnotgranted...Toast.makeText(MainActivity.this,"notgranted",Toast.LENGTH_SHORT);}}}super.onActivityResult(requestCode,resultCode,data);}

为什么需要这些权限,因为副屏的主要类Presentation是继承与Dialog的

2.2 定义分屏的界面

publicclassDifferentDisplayextendsPresentation{publicDifferentDisplay(ContextouterContext,Displaydisplay){super(outerContext,display);}@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.diffrentdisplay);}publicvoidsetText(Stringtext){TextViewtextView=findViewById(R.id.tv_test);textView.setText(text);}}

界面布局

<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns: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"><TextViewandroid: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 操作分屏界面

先放代码再来说明

publicclassMainActivityextendsAppCompatActivity{finalStringTAG="MainActivity";DifferentDisplaymPresentation;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//双屏显示DisplayManagermDisplayManager;//屏幕管理类Display[]displays;//屏幕数组mDisplayManager=(DisplayManager)MainActivity.this.getSystemService(Context.DISPLAY_SERVICE);displays=mDisplayManager.getDisplays();//得到显示器数组if(displays.length==0){Log.d(TAG,"无显示屏");return;}mPresentation=newDifferentDisplay(getApplicationContext(),displays[1]);//displays[1]是副屏//8.0需要替换为TYPE_APPLICATION_OVERLAYmPresentation.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);mPresentation.show();}intindex=1;publicvoidTest(Viewview){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怎么实现设备的异显功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!