欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Q 双屏异显

程序员文章站 2022-03-03 22:05:49
Android Q 双屏异显现在很多AR场景,需要扩展屏或者虚拟屏VD 进行展示3D画面,并通过手柄或者手机模拟的触摸板进行交互控制。从android官网多屏幕支持了解其android Q 已经有多屏支持了,方便扩展屏幕及折叠屏使用。此处记录下其体验demo经过验证,可支持同应用不同activity 启动在第二块屏幕上。imageView3.setOnClickListener { val manager = activity?.getSystemService(C...

Android Q 双屏异显

现在很多AR场景,需要扩展屏或者虚拟屏VD 进行展示3D画面,并通过手柄或者手机模拟的触摸板进行交互控制。从android官网多屏幕支持了解其android Q 已经有多屏支持了,方便扩展屏幕及折叠屏使用。

此处记录下其体验demo

经过验证,可支持同应用不同activity 启动在第二块屏幕上。

imageView3.setOnClickListener {
            val manager = activity?.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
            val displays = manager.displays
            Log.e("zjr", "onCreate: displays.size = ${displays.size}")
            if (displays.size > 1) {

                Toast.makeText(
                    activity,
                    "开启扩展屏:displayId = ${displays[1].displayId}",
                    Toast.LENGTH_SHORT
                ).show()

                Log.w(TAG, "onActivityCreated: flags = ${displays[1].flags},private = ${Display.FLAG_PRIVATE},secure = ${Display.FLAG_SECURE}" )
                val options = ActivityOptions.makeBasic()
                options.launchDisplayId = displays[1].displayId
                val optsBundle = options.toBundle()

                //   val intent = Intent(activity,SecondActivity::class.java)
                // "com.android.settings", "com.android.settings.Settings"
               

//                val intent = Intent()
//                intent.component =
//                    //ComponentName("com.android.settings","com.android.settings.Settings")

                val intent = Intent(activity,SecondActivity::class.java)
                        intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
                //判断是否有限制启动在对应的display上
                if (activityManager.isActivityStartAllowedOnDisplay(
                        context!!,
                        options.launchDisplayId,
                        intent
                    )
                ) {
                    startActivity(intent, optsBundle)
                } else {
                    Log.e(TAG, "onActivityCreated: 不支持启动在扩展屏幕上")
                    Toast.makeText(activity, "不支持启动在扩展屏幕上", Toast.LENGTH_SHORT).show()
                }
            }

        }

其中比较坑的地方就是:

intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)

必须添加如上flag 才能正常启动在扩展屏上。

 测试环境: 外接typec扩展屏,支持dp输出的手机,如oppo Reno; 小米直接去除了DP输出。。。

本文地址:https://blog.csdn.net/u010165638/article/details/107356854