【技术分享】快速在SX-3568商显主板的Android系统上实现双屏异显

描述

Linux上开发APP太过缓慢或者动画不够炫酷?该使用Android系统进行开发啦!本文分享如何快速在SX-3568商显主板的Android系统上实现双屏异显。

本次使用的平台为致远电子SX-3568系列智慧商显主板,支持HDMI、eDP、LVDS、MIPI DSI等多种显示接口,搭载高性能GPU,具备视频解码能力,支持4K 60FPS显示。本次选用MIPI DSI屏幕作为主屏,HDMI屏幕作为副屏进行讲解,使用SX-3568在Android系统上实现双屏异显,可以应用在商业显示器、智能家居等多种应用场景。
 

主板  确认主副屏

使用命令getprop | grep vendor.hwc.device可以查看当前的主副屏。对应属性vendor.hwc.device.primary为主屏,vendor.hwc.device.extend为副屏。可以看到此处主屏为MIPI DSI,副屏为HDMI。

主板

 

主板  代码实现

在MainAvctivity中实现showSecondByActivity方法,用于调用第二个Avctivity并绑定显示器。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

private void showSecondByActivity(Context context){ ActivityOptions options = ActivityOptions.makeBasic(); MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE); MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO); if (route != null) { Display presentationDisplay = route.getPresentationDisplay(); options.setLaunchDisplayId(presentationDisplay.getDisplayId()); Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent, options.toBundle()); }}

第一步,在showSecondByActivity函数中,首先通过ActivityOptions类的makeBasic方法,创建一个基本的ActivityOptions类变量 ,ActivityOptions是一个可用于在新建一个Activity时候,将Bundle信息传递给新Activity的类,用于后面在创建新的Activity时候通过setLaunchDisplayId指定 SecondActivity 在启动后应显示在副屏上;

第二步,获取系统中的MediaRouter系统服务,用于后续获取显示屏幕ID来指定屏幕。MediaRouter Service是一个用于多媒体路由的系统服务,getSelectedRoute方法会返回一个可用的RouteInfo,也就是多媒体路由的对应信息。然后使用getPresentationDisplay从路由信息中获取一个新的Presentation,Presentation是一个特殊的Dialog,可以在创建它的时候将它直接关联到新的显示器上;

第三步,调用getDisplayId方法获取显示器ID,将ActivityOptions的DisplayId设置为新的显示器的ID,再通过Intent在新的Presentation创建一个新的Activity即可。这样在新的Activity上显示的内容就会跟随新的Presentation显示在副屏上。

然后在MainAvctivity中就可以直接调用showSecondByActivity,比如在onCreate方法中调用。这里让它显示activity_main.xml里面的内容。

  •  
  •  
  •  
  •  
  •  

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showSecondByActivity(MainActivity.this);}

SecondActivity类的内容用于测试,仅仅用于显示不同内容。这里让它显示activity_second.xml里面的内容,并让activity_second.xml的内容和activity_main.xml有差异。
 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

public class SecondActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); }}

最后修改AndroidManifest,xml中内容。Activity的多显示器支持需要支持。同时 application 或者 activity 需要支持分屏属性即或者标签下设置新的属性 属性用于指定应用支持多窗口模式。
 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

activity> application>manifest>

 

主板  显示效果

编译并运行后,可以在SX-3568上看到双屏异显的效果如下图,其中MIPI DSI主屏上显示为activity_main.xml的内容;HDMI副屏上显示为activity_second.xml的内容。

主板

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分