日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Android Automotive車載應用對駕駛模式Safe Drive Mode的適配

瀏覽:17日期:2022-09-19 15:31:34
前言

最近在Android Automotive 上遇到的一些問題,有好幾個都跟Android 車載操作系統上應用的駕駛模式有關,國內這方面的資料很少,自己在這里總結一下相關的知識,主要包含下面幾個方面:

Android Automotive 和 Android Auto的區別 Android Automotive 的駕駛模式介紹 Android Automotive 實現駕駛模式的幾種實現方式和代碼示例,以及實現效果

主要是還是想總結一下Android 車載應用對Automotive 駕駛模式(Drive Mode)適配的幾種方式。

開發環境

Android Studio 版本4.1.2

1. Android Automotive 和 Android Auto的區別

Android Auto:

Android Auto是一個專門為駕駛環境而設計的Android端App

可以用來將Android設備上的部分功能,通過數據線映射到汽車的屏幕上。當時做Android Auto主打的是安全性,為了避免用戶在駕駛過程中拿起手機,谷歌為Android Auto增加了Google Assistant,也就是在駕駛環境中使用語音交互,使得用戶可以再不改變自身物理姿勢的情況下實現一些手機app的操作。 缺點是通過數據線將手機應用映射到車機上,應用到底還是在手機上運行的,以手機為中心,這樣汽車本身相關數據,比如車速,GPS,傳感器,行駛狀態這些數據無法同步到手機上。

Android Automotive 是可以再車載硬件上運行的操作系統和開源平臺

我們最常見的Android平臺試運行在手機或者平板上的,和我們常見的Android 操作系統相比,Android Automotive具有相同的代碼庫,而且專門增加了對汽車特定的功能和技術支撐,主要包含下面幾個方面:

Car App:包括OEM預裝的,和第三方開發并且通過車載應用商店下載到車機上的app Car API:OEM車廠提供給汽車App特有的接口,包括儀表盤相關的API,車輛硬件(座艙,通風等)的相關API,多媒體,導航,車載系統設置界面和車輛傳感器相關的API Car Service:Car Service是一個系統service,提供了和車相關的一系列的服務。 Vehicle Network Service:OEM廠商的網絡服務 Vehicle HAL:汽車的硬件抽象層描述

Android Auto在車機上顯示的其實是手機端的數據,Android Automotive則要考慮和手機端app的數據和賬號同步的問題*

2. Android Automotive 的駕駛模式介紹

前面提到谷歌在2014年I/O 大會上推出Android Auto的初衷是更好地保障駕駛安全,Android Automotive 也增加了駕駛模式(Drive Mode),旨在幫助汽車OEM廠商從系統層面對有可能造成駕駛員分心的應用進行管理。在駕駛模式下,Android Automotive會對Driving Distraction提出一系列的建議。OEM廠商也可以要求有可能造成駕駛員分心的 Activity 或者 Fragment 界面,在Manifest File中將自己注冊成Distraction Optimized,比如需要駕駛員操作的登陸界面,掃碼界面,切換歌曲,或者視頻播放界面,游戲界面。而Android Automotive 則會在駕駛模式的時候,主動對標記為Distraction Optimized的界面進行限制。

3. Android Automotive 實現駕駛模式的幾種實現方式和代碼示例

方式一 .在Manifest文件中,使用在元數據meta-data對有可能造成分心駕駛的界面進行標記

Android Automotive 會把像下面這個使用元數據把distractionOptimized標記的活動或Fragment 標識為需要優化的界面,并且在駕駛模式時禁用這些界面,或者在當前Activity之上,增加UI 層級更高的提示框,從而避免在駕駛過程中這些界面造成用戶分心。

<activity android:name='.QRCodeScanPage'><meta-data android:name='distractionOptimized' android:value='true'/></activity>

上面這段代碼,用于給用戶掃碼登陸的界面QRCodeScanPage,在駕駛狀態下會被AndroidAutomotive區別處理,OEM車廠也可以對Android Automotive進行客制化的修改,在限制界面之上增加遮蓋。

大家可以看到,這種對分心界面的處理方式簡單粗暴,直接在Manifest文件里對組件的元素增加Meta-data標簽就可以了,缺點是不夠靈活,所有的分心界面被遮蓋以后效果都一樣,而系統提供的統一遮蓋方式,為了能夠適用于各個應用的分心界面,往往直接把整個UI界面都擋住,即使QR碼的UI很小,還是要蓋住整個屏幕,用戶體驗很不好。

方式二 .使用CarDrivingStateManager類獲取當前汽車的行駛狀態,應用獲取到行駛狀態以后自己定義分心界面的遮擋方案

Android Automotive的CarDrivingStateManager類可以根據車輛硬件抽象層(VHAL)提供的傳感器數據獲取當前汽車的行駛狀態(停車,空轉,行駛),這樣應用就可以通過下面的設置CarDrivingStateEventListener監聽器:

導包:

import android.car.Car;/* For CarDrivingState */import android.car.drivingstate.CarDrivingStateEvent;import android.car.drivingstate.CarDrivingStateManager;

private final CarDrivingStateManager.CarDrivingStateEventListenermDrivingStateEventListener = new CarDrivingStateManager.CarDrivingStateEventListener() { @Override public void onDrivingStateChanged(CarDrivingStateEvent event) { mDrivingStateEvent = event; handleDrivingStateChange(); }};

Android Automotive為 DrivingState定義了以下四個狀態:

/** * This is when we don’t have enough information to infer the car’s driving state. */public static final int DRIVING_STATE_UNKNOWN = -1;/** * Car is parked - Gear is in Parked mode. */public static final int DRIVING_STATE_PARKED = 0;/** * Car is idling. Gear is not in Parked mode and Speed of the vehicle is zero. */public static final int DRIVING_STATE_IDLING = 1;/** * Car is moving. Gear is not in parked mode and speed of the vehicle is non zero. */public static final int DRIVING_STATE_MOVING = 2;

DrivingStateManager的代碼:

mDrivingStateManager = (CarDrivingStateManager) mCar.getCarManager( Car.CAR_DRIVING_STATE_SERVICE);/* Register the listener (implemented below) */mDrivingStateManager.registerListener(mDrivingStateEventListener);/* While we wait for a change to be notified, query the current state */mDrivingStateEvent = mDrivingStateManager.getCurrentCarDrivingState();

這樣就可以獲取當前車輛的三種行駛狀態:停止,空轉,駕駛,也可能會返回UNKNOWN,需要開發者處理。

另外,這里有個小竅門, 通過 CarUxRestrictions對象的isRequiresDistractionOptimization() 方法,可以直接獲取當前車輛是否處于駕駛狀態,1表示車輛處于駕駛狀態,0表示非駕駛狀態。

我們看到,上面的方法二可以主動查詢當前車輛的行駛狀態,然后可以根據DrivingStateEventListener返回的結果決定是否展示分心界面,也可以自己寫遮蓋代碼。相比方式一,增加了很多靈活性。

方式三 .使用CarUxRestrictionsManager 并監聽OnUxRestrictionsChangedListener

導包:

import android.car.Car;/* For CarUxRestrictions */import android.car.drivingstate.CarUxRestrictions;import android.car.drivingstate.CarUxRestrictionsManager;

從下面的CarUxRestrictionManager可以看到,OnUxRestrictionsChangedListener 提供了駕駛模式限制狀態變化的監聽:

@Nullable private CarUxRestrictionsManager mCarUxRestrictionsManager;private CarUxRestrictions mCurrentUxRestrictions;/* Implement the onUxRestrictionsChangedListener interface */private CarUxRestrictionsManager.OnUxRestrictionsChangedListener mUxrChangeListener = new CarUxRestrictionsManager.OnUxRestrictionsChangedListener() {@Overridepublic void onUxRestrictionsChanged(CarUxRestrictions carUxRestrictions) {mCurrentUxRestrictions = carUxRestrictions;/* Handle the new restrictions */handleUxRestrictionsChanged(carUxRestrictions);} };

這個方法三主要的應用場景是:不適于在啟動時監聽的分心事件或者持續時間比較長的分心界面。比如長時間的視頻播放應用等等

結語

以上介紹了Android Automotive的駕駛模式,以及實現的幾種方法,各個方式的優缺點和應用場景。明天膝蓋關節鏡手術,這里網不好,等回去了再把代碼在Android 車載系統的虛擬機上實現出來,使用下面的ADB指令是可以模擬出當前車輛速度的,可以驗證駕駛狀態的改變,最后一個參數是速度,單位是米/秒。

adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 40

以上就是詳解Android Automotive車載應用對駕駛模式(Safe Drive Mode)的適配的詳細內容,更多關于Android Automotive適配駕駛模式(Safe Drive Mode)的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品乱码日韩| 五月天综合网站| 中文字幕一区日韩精品| 欧美资源在线| 视频一区二区三区中文字幕| 免费成人性网站| 日韩高清一区在线| 综合激情网...| 日韩激情中文字幕| 婷婷亚洲成人| 国产欧美一区二区三区国产幕精品 | 亚洲午夜视频| 亚洲视频www| 亚洲性视频在线| 日本一区中文字幕| 日韩精品成人| 国产极品模特精品一二| 久久精品理论片| 日韩欧美一区二区三区免费看| 激情婷婷亚洲| 蜜臀av国产精品久久久久| 欧美日韩午夜电影网| 精品一区二区三区的国产在线观看| 国产成人精品亚洲线观看| 日本在线精品| 亚洲一卡久久| 欧美日韩精品一区二区三区视频 | 亚洲人成网站在线在线观看| 日本精品一区二区三区在线观看视频| 国产精品美女在线观看直播| 日韩av影院| sm捆绑调教国产免费网站在线观看| 久久精品国语| 日av在线不卡| 久久久91麻豆精品国产一区| 日本欧美不卡| 免费久久99精品国产| 国产亚洲精品美女久久 | 免费在线观看日韩欧美| 国产欧美视频在线| 免费一二一二在线视频| 亚洲一区二区三区高清| 欧美在线首页| 国产99久久| 欧美精品中文字幕亚洲专区| 精品欧美视频| 亚洲综合二区| 麻豆视频久久| 99国产精品视频免费观看一公开| 欧美日韩精品一区二区三区在线观看| 久久电影tv| 香蕉久久久久久| 高潮一区二区| 久久国产精品亚洲77777| 国产精品sm| 日韩一区二区免费看| 国产精品3区| 国产精品日本| 给我免费播放日韩视频| 日韩在线卡一卡二| 丝袜诱惑一区二区| 日本不卡在线视频| 成人日韩在线| 91久久精品无嫩草影院| 亚洲午夜黄色| 精品免费av一区二区三区| 人人精品人人爱| 日韩在线二区| 久久精品99国产精品日本| 99国产精品免费视频观看| 欧美日韩精品一区二区三区视频 | 亚洲在线电影| 9999国产精品| 中文在线日韩| 91精品精品| 久久精品国产久精国产爱| 日韩精品一级二级 | 九九99久久精品在免费线bt| 亚洲一二av| 午夜av一区| 日韩国产激情| 国产极品一区| 日韩高清一区在线 | 午夜久久美女| zzzwww在线看片免费| 国产日韩亚洲| 亚洲三级精品| 日韩午夜一区| 日韩一区自拍| 精品国产亚洲一区二区三区大结局| 一本综合精品| 不卡在线一区二区| 在线看片国产福利你懂的| 国产欧美高清| 亚洲精品成a人ⅴ香蕉片| 99国产精品久久久久久久| 视频福利一区| 成人亚洲一区| 国产伦精品一区二区三区在线播放| 亚洲欧美网站在线观看| 国产亚洲网站| 不卡中文字幕| 99精品视频精品精品视频| 97欧美在线视频| 国产一区二区三区国产精品| 国产精品magnet| 国产精品一区二区美女视频免费看 | 国产精品超碰| 欧美日本久久| 日本欧美久久久久免费播放网| 亚洲免费影院| 久久av一区| 久久国产88| 亚洲欧美久久| 亚洲一区久久| 国产毛片一区| 亚洲自啪免费| 日韩影院在线观看| 久久亚洲精品伦理| 亚洲国产专区| 在线国产一区| 在线亚洲自拍| 在线看片日韩| 日韩毛片网站| 日本成人中文字幕| 日韩三区四区| 国产亚洲电影| 麻豆一区在线| 日韩.com| 日韩欧美一区二区三区在线视频| 丝袜美腿诱惑一区二区三区| 在线日韩一区| 夜夜精品视频| 免费成人性网站| 日韩欧美美女在线观看| 日韩高清成人在线| 美女久久精品| 九色porny丨国产首页在线| 色婷婷精品视频| 黄色精品网站| 亚洲ww精品| 国产精品天堂蜜av在线播放| 鲁大师精品99久久久| 日韩激情一区| 91精品观看| 涩涩涩久久久成人精品| 精品视频一区二区三区四区五区| 成人精品动漫一区二区三区| 欧洲av不卡| 久久国产毛片| 先锋影音国产一区| 日韩av中文字幕一区二区三区| 国产精品密蕾丝视频下载| 国产成人久久精品一区二区三区| 久久亚洲成人| 综合视频一区| 美腿丝袜亚洲一区| 成人在线网站| 日韩精品一区第一页| 国产欧美三级| 美女网站视频一区| 免费观看日韩电影| 精品五月天堂| 黄色免费成人| 日本不卡一区二区| 欧美日韩视频网站| 亚洲免费专区| 黄色在线观看www| 日av在线不卡| 狂野欧美性猛交xxxx| 在线成人动漫av| 97久久亚洲| 少妇精品导航| 日韩二区三区四区| 伊人网在线播放| 视频一区二区三区中文字幕| 欧美极品一区二区三区| 亚洲二区免费| 欧美伊人影院| a日韩av网址| 蜜臀av国产精品久久久久| 精品欠久久久中文字幕加勒比| 亚洲高清成人| 国产精品视频一区二区三区综合 | 国产精品日韩精品在线播放 | 午夜精品一区二区三区国产| 国产视频网站一区二区三区| 国产综合精品一区| 美女在线视频一区| 蜜臀av一区二区在线免费观看| 成人亚洲一区| 综合五月婷婷| 日韩毛片在线| 国产精品久久久久久模特| 亚洲激情另类| 久久一区亚洲| 一本一道久久a久久| 伊伊综合在线| 久久国产精品色av免费看| 自拍日韩欧美|