本次使用的平臺為致遠(yuǎn)電子SX-3568系列智慧商顯主板,支持HDMI、eDP、LVDS、MIPI DSI等多種顯示接口,搭載高性能GPU,具備視頻解碼能力,支持4K 60FPS顯示。本次選用HDMI屏幕作為主屏,MIPI DSI屏幕作為副屏進(jìn)行講解,使用SX-3568在Android系統(tǒng)上實(shí)現(xiàn)雙屏異顯,可以應(yīng)用在商業(yè)顯示器、智能家居等多種應(yīng)用場景。
??確認(rèn)主副屏
使用命令getprop | grep vendor.hwc.device可以查看當(dāng)前的主副屏。對應(yīng)屬性vendor.hwc.device.primary為主屏,vendor.hwc.device.extend為副屏??梢钥吹酱颂幹髌翞镸IPI DSI,副屏為HDMI。
??代碼實(shí)現(xiàn)
在MainAvctivity中實(shí)現(xiàn)showSecondByActivity方法,用于調(diào)用第二個(gè)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函數(shù)中,首先通過ActivityOptions類的makeBasic方法,創(chuàng)建一個(gè)基本的ActivityOptions類變量 ,ActivityOptions是一個(gè)可用于在新建一個(gè)Activity時(shí)候,將Bundle信息傳遞給新Activity的類,用于后面在創(chuàng)建新的Activity時(shí)候通過setLaunchDisplayId指定 SecondActivity 在啟動后應(yīng)顯示在副屏上;
第二步,獲取系統(tǒng)中的MediaRouter系統(tǒng)服務(wù),用于后續(xù)獲取顯示屏幕ID來指定屏幕。MediaRouter Service是一個(gè)用于多媒體路由的系統(tǒng)服務(wù),getSelectedRoute方法會返回一個(gè)可用的RouteInfo,也就是多媒體路由的對應(yīng)信息。然后使用getPresentationDisplay從路由信息中獲取一個(gè)新的Presentation,Presentation是一個(gè)特殊的Dialog,可以在創(chuàng)建它的時(shí)候?qū)⑺苯雨P(guān)聯(lián)到新的顯示器上;
第三步,調(diào)用getDisplayId方法獲取顯示器ID,將ActivityOptions的DisplayId設(shè)置為新的顯示器的ID,再通過Intent在新的Presentation創(chuàng)建一個(gè)新的Activity即可。這樣在新的Activity上顯示的內(nèi)容就會跟隨新的Presentation顯示在副屏上。
然后在MainAvctivity中就可以直接調(diào)用showSecondByActivity,比如在onCreate方法中調(diào)用。這里讓它顯示activity_main.xml里面的內(nèi)容。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showSecondByActivity(MainActivity.this);
}
SecondActivity類的內(nèi)容用于測試,僅僅用于顯示不同內(nèi)容。這里讓它顯示activity_second.xml里面的內(nèi)容,并讓activity_second.xml的內(nèi)容和activity_main.xml有差異。
public class SecondActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
最后修改AndroidManifest,xml中內(nèi)容。Activity的多顯示器支持需要支持。同時(shí) application 或者 activity 需要支持分屏屬性即或者標(biāo)簽下設(shè)置新的屬性屬性用于指定應(yīng)用支持多窗口模式。
<uses-feature android:name="android.software.activities_on_secondary_displays" />
<application
...
android:resizeableActivity="true"
...
<activity
android:name=".SecondActivity"
android:exported="true">
activity>
application>
manifest>
顯示效果
編譯并運(yùn)行后,可以在SX-3568上看到雙屏異顯的效果如下圖,其中MIPI DSI主屏上顯示為activity_main.xml的內(nèi)容;HDMI副屏上顯示為activity_second.xml的內(nèi)容。
技術(shù)交流群長按識別如下二維碼可加入“工控板/核心板技術(shù)交流群”,與志同道合的朋友交流,并有專業(yè)技術(shù)人員為您答疑解惑,如有問題可以咨詢小致微信:zlgmcu-888。
原文標(biāo)題:【技術(shù)分享】快速在SX-3568商顯主板的Android系統(tǒng)上實(shí)現(xiàn)雙屏異顯
文章出處:【微信公眾號:ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
致遠(yuǎn)電子
+關(guān)注
關(guān)注
13文章
408瀏覽量
31361
原文標(biāo)題:【技術(shù)分享】快速在SX-3568商顯主板的Android系統(tǒng)上實(shí)現(xiàn)雙屏異顯
文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論