最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Android Automotive車載應(yīng)用對(duì)駕駛模式Safe Drive Mode的適配

 更新時(shí)間:2021年04月12日 11:48:57   作者:譚妥 Tan Tuo  
這篇文章主要介紹了詳解Android Automotive車載應(yīng)用對(duì)駕駛模式(Safe Drive Mode)的適配,對(duì)車載應(yīng)用感興趣的同學(xué)可以參考下

前言

最近在Android Automotive 上遇到的一些問(wèn)題,有好幾個(gè)都跟Android 車載操作系統(tǒng)上應(yīng)用的駕駛模式有關(guān),國(guó)內(nèi)這方面的資料很少,自己在這里總結(jié)一下相關(guān)的知識(shí),主要包含下面幾個(gè)方面:

  1. Android Automotive 和 Android Auto的區(qū)別
  2. Android Automotive 的駕駛模式介紹
  3. Android Automotive 實(shí)現(xiàn)駕駛模式的幾種實(shí)現(xiàn)方式和代碼示例,以及實(shí)現(xiàn)效果

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

開(kāi)發(fā)環(huán)境

Android Studio 版本4.1.2

1. Android Automotive 和 Android Auto的區(qū)別

Android Auto:

Android Auto是一個(gè)專門(mén)為駕駛環(huán)境而設(shè)計(jì)的Android端App

  • 可以用來(lái)將Android設(shè)備上的部分功能,通過(guò)數(shù)據(jù)線映射到汽車的屏幕上。當(dāng)時(shí)做Android Auto主打的是安全性,為了避免用戶在駕駛過(guò)程中拿起手機(jī),谷歌為Android Auto增加了Google Assistant,也就是在駕駛環(huán)境中使用語(yǔ)音交互,使得用戶可以再不改變自身物理姿勢(shì)的情況下實(shí)現(xiàn)一些手機(jī)app的操作。
  • 缺點(diǎn)是通過(guò)數(shù)據(jù)線將手機(jī)應(yīng)用映射到車機(jī)上,應(yīng)用到底還是在手機(jī)上運(yùn)行的,以手機(jī)為中心,這樣汽車本身相關(guān)數(shù)據(jù),比如車速,GPS,傳感器,行駛狀態(tài)這些數(shù)據(jù)無(wú)法同步到手機(jī)上。

Android Automotive 是可以再車載硬件上運(yùn)行的操作系統(tǒng)和開(kāi)源平臺(tái)

我們最常見(jiàn)的Android平臺(tái)試運(yùn)行在手機(jī)或者平板上的,和我們常見(jiàn)的Android 操作系統(tǒng)相比,Android Automotive具有相同的代碼庫(kù),而且專門(mén)增加了對(duì)汽車特定的功能和技術(shù)支撐,主要包含下面幾個(gè)方面:

  • Car App:包括OEM預(yù)裝的,和第三方開(kāi)發(fā)并且通過(guò)車載應(yīng)用商店下載到車機(jī)上的app
  • Car API:OEM車廠提供給汽車App特有的接口,包括儀表盤(pán)相關(guān)的API,車輛硬件(座艙,通風(fēng)等)的相關(guān)API,多媒體,導(dǎo)航,車載系統(tǒng)設(shè)置界面和車輛傳感器相關(guān)的API
  • Car Service:Car Service是一個(gè)系統(tǒng)service,提供了和車相關(guān)的一系列的服務(wù)。
  • Vehicle Network Service:OEM廠商的網(wǎng)絡(luò)服務(wù)
  • Vehicle HAL:汽車的硬件抽象層描述

Android Auto在車機(jī)上顯示的其實(shí)是手機(jī)端的數(shù)據(jù),Android Automotive則要考慮和手機(jī)端app的數(shù)據(jù)和賬號(hào)同步的問(wèn)題*

2. Android Automotive 的駕駛模式介紹

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

3. Android Automotive 實(shí)現(xiàn)駕駛模式的幾種實(shí)現(xiàn)方式和代碼示例

方式一 .在Manifest文件中,使用在元數(shù)據(jù)meta-data對(duì)有可能造成分心駕駛的界面進(jìn)行標(biāo)記

Android Automotive 會(huì)把像下面這個(gè)使用元數(shù)據(jù)把distractionOptimized標(biāo)記的活動(dòng)或Fragment 標(biāo)識(shí)為需要優(yōu)化的界面,并且在駕駛模式時(shí)禁用這些界面,或者在當(dāng)前Activity之上,增加UI 層級(jí)更高的提示框,從而避免在駕駛過(guò)程中這些界面造成用戶分心。

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

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

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

方式二 .使用CarDrivingStateManager類獲取當(dāng)前汽車的行駛狀態(tài),應(yīng)用獲取到行駛狀態(tài)以后自己定義分心界面的遮擋方案

Android Automotive的CarDrivingStateManager類可以根據(jù)車輛硬件抽象層(VHAL)提供的傳感器數(shù)據(jù)獲取當(dāng)前汽車的行駛狀態(tài)(停車,空轉(zhuǎn),行駛),這樣應(yīng)用就可以通過(guò)下面的設(shè)置CarDrivingStateEventListener監(jiān)聽(tīng)器:

導(dǎo)包:

import android.car.Car;
/* For CarDrivingState */
import android.car.drivingstate.CarDrivingStateEvent;
import android.car.drivingstate.CarDrivingStateManager;
private final CarDrivingStateManager.CarDrivingStateEventListener
mDrivingStateEventListener =
       new CarDrivingStateManager.CarDrivingStateEventListener() {
   @Override
   public void onDrivingStateChanged(CarDrivingStateEvent event) {
       mDrivingStateEvent = event;
       handleDrivingStateChange();
   }
};

Android Automotive為 DrivingState定義了以下四個(gè)狀態(tài):

/**
 * 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();

這樣就可以獲取當(dāng)前車輛的三種行駛狀態(tài):停止,空轉(zhuǎn),駕駛,也可能會(huì)返回UNKNOWN,需要開(kāi)發(fā)者處理。

另外,這里有個(gè)小竅門(mén), 通過(guò) CarUxRestrictions對(duì)象的isRequiresDistractionOptimization() 方法,可以直接獲取當(dāng)前車輛是否處于駕駛狀態(tài),1表示車輛處于駕駛狀態(tài),0表示非駕駛狀態(tài)。

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

方式三 .使用CarUxRestrictionsManager 并監(jiān)聽(tīng)OnUxRestrictionsChangedListener

導(dǎo)包:

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

從下面的CarUxRestrictionManager可以看到,OnUxRestrictionsChangedListener 提供了駕駛模式限制狀態(tài)變化的監(jiān)聽(tīng):

@Nullable private CarUxRestrictionsManager mCarUxRestrictionsManager;
private CarUxRestrictions mCurrentUxRestrictions;

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

這個(gè)方法三主要的應(yīng)用場(chǎng)景是:不適于在啟動(dòng)時(shí)監(jiān)聽(tīng)的分心事件或者持續(xù)時(shí)間比較長(zhǎng)的分心界面。比如長(zhǎng)時(shí)間的視頻播放應(yīng)用等等

結(jié)語(yǔ)

以上介紹了Android Automotive的駕駛模式,以及實(shí)現(xiàn)的幾種方法,各個(gè)方式的優(yōu)缺點(diǎn)和應(yīng)用場(chǎng)景。明天膝蓋關(guān)節(jié)鏡手術(shù),這里網(wǎng)不好,等回去了再把代碼在Android 車載系統(tǒng)的虛擬機(jī)上實(shí)現(xiàn)出來(lái),使用下面的ADB指令是可以模擬出當(dāng)前車輛速度的,可以驗(yàn)證駕駛狀態(tài)的改變,最后一個(gè)參數(shù)是速度,單位是米/秒。

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

以上就是詳解Android Automotive車載應(yīng)用對(duì)駕駛模式(Safe Drive Mode)的適配的詳細(xì)內(nèi)容,更多關(guān)于Android Automotive適配駕駛模式(Safe Drive Mode)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android使用GridView實(shí)現(xiàn)日歷功能示例(詳細(xì)代碼)

    Android使用GridView實(shí)現(xiàn)日歷功能示例(詳細(xì)代碼)

    本篇文章主要介紹了Android使用GridView實(shí)現(xiàn)日歷功能示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Android實(shí)現(xiàn)點(diǎn)擊WebView界面中圖片滑動(dòng)瀏覽與保存圖片功能

    Android實(shí)現(xiàn)點(diǎn)擊WebView界面中圖片滑動(dòng)瀏覽與保存圖片功能

    大家在日常使用spp流量文章的時(shí)候經(jīng)常會(huì)遇到這樣的一個(gè)功能,點(diǎn)擊文章的圖片進(jìn)入圖片的瀏覽模式,可以左右滑動(dòng)圖片瀏覽,并且可以實(shí)現(xiàn)保存圖片的功能,所以本文主要就介紹了在Android如何實(shí)現(xiàn)點(diǎn)擊WebView界面中圖片滑動(dòng)瀏覽與保存圖片功能,需要的朋友可以參考下。
    2017-04-04
  • Android滑動(dòng)沖突的完美解決

    Android滑動(dòng)沖突的完美解決

    這篇文章主要為大家詳細(xì)介紹了Android滑動(dòng)沖突的完美解決方案,針對(duì)三種滑動(dòng)沖突場(chǎng)景進(jìn)行解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android Flutter實(shí)現(xiàn)仿閑魚(yú)動(dòng)畫(huà)效果

    Android Flutter實(shí)現(xiàn)仿閑魚(yú)動(dòng)畫(huà)效果

    目前正在做的項(xiàng)目,為了增加用戶的體驗(yàn)度,準(zhǔn)備增加一些動(dòng)畫(huà)效果。本文將通過(guò)Android Flutter實(shí)現(xiàn)仿閑魚(yú)動(dòng)畫(huà)效果,感興趣的可以嘗試一下
    2023-02-02
  • Android、Flutter為不同的CPU架構(gòu)包打包APK(v7a、v8a、x86區(qū)別)

    Android、Flutter為不同的CPU架構(gòu)包打包APK(v7a、v8a、x86區(qū)別)

    默認(rèn)情況下,Android和Flutter打包出來(lái)的Apk都是包含了所有架構(gòu)的,這樣打出來(lái)的apk體積相對(duì)于單架構(gòu)的apk有點(diǎn)大,這時(shí),我們就需要分別打出不同的架構(gòu)包
    2023-08-08
  • android使用ViewPager實(shí)現(xiàn)輪播效果

    android使用ViewPager實(shí)現(xiàn)輪播效果

    這篇文章主要為大家詳細(xì)介紹了android使用ViewPager實(shí)現(xiàn)輪播效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android 手動(dòng)獲取判斷處理權(quán)限

    Android 手動(dòng)獲取判斷處理權(quán)限

    本篇文章主要介紹了Android手動(dòng)獲取判斷處理權(quán)限的方法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • Android Button按鈕點(diǎn)擊背景和文字變化操作

    Android Button按鈕點(diǎn)擊背景和文字變化操作

    這篇文章主要介紹了Android Button按鈕點(diǎn)擊背景和文字變化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 詳解Glide最新版V4使用指南

    詳解Glide最新版V4使用指南

    這篇文章主要介紹了詳解Glide最新版V4使用指南,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Convert WebP to PNG using java

    Convert WebP to PNG using java

    本文主要介紹Convert WebP to PNG using java,這里對(duì) WebP 做了詳細(xì)說(shuō)明,并講解Linux 環(huán)境下WebP 轉(zhuǎn)png格式的示例,有興趣的小伙伴可以參考下
    2016-08-08

最新評(píng)論

巴林左旗| 吉安县| 瑞昌市| 南丹县| 昌黎县| 钟祥市| 织金县| 东山县| 乌恰县| 泽州县| 临沧市| 习水县| 芦山县| 治多县| 尼勒克县| 高雄市| 建瓯市| 云梦县| 普宁市| 张家界市| 梓潼县| 汝州市| 宝清县| 广饶县| 水城县| 宁安市| 高雄县| 松阳县| 沿河| 金山区| 青神县| 澳门| 沿河| 永年县| 含山县| 兴业县| 林州市| 郑州市| 镇江市| 青龙| 光泽县|