車載桌面加入AppWidget小部件的支持-千里馬車載車機(jī)android系統(tǒng)實(shí)戰(zhàn)開發(fā)
背景:
原生的aosp車載系統(tǒng)根本就不支持任何的appwidget,但是國(guó)內(nèi)很多車機(jī)廠都有廣泛適用appwidget的功能。更多干貨實(shí)戰(zhàn)視頻:https://www.bilibili.com/video/BV1ah411d7Y3/[1]

明顯左邊的音樂(lè),藍(lán)牙電話等屬于其他應(yīng)用的畫面,熟悉android手機(jī)同學(xué)就肯定知道,這個(gè)其實(shí)就是手機(jī)桌面上的appwidget。
移植小部件展示功能到車載桌面
1、首先確定車載系統(tǒng)是否有appwidget服務(wù)
確認(rèn)方法可以通過(guò)如下命令:
emulator_car_x86_64:/ # service list | grep appwidget ? ? ? ? ? ?
如果系統(tǒng)有相關(guān)服務(wù)則有如下輸出
emulator_car_x86_64:/ # service list | grep appwidget ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
53 appwidget: [com.android.internal.appwidget.IAppWidgetService]
如果沒有,則顯示一片空白,啥也沒有
默認(rèn)aosp情況其實(shí)是沒有開放appwidget的,這里我們就需要考慮怎么開放appwidget功能
這里就需要對(duì)appwidget的加入servicemanager流程比較清晰:

其實(shí)它是在這里進(jìn)行的啟動(dòng)加入,但是大家可以看到,這里其實(shí)是有判斷條件的:
?if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_APP_WIDGETS)
? ? ? ? ? ? ? ? ? ?|| context.getResources().getBoolean(R.bool.config_enableAppWidgetService))
即系統(tǒng)是否有開放FEATURE_APP_WIDGETS或者說(shuō)有config_enableAppWidgetService配置為true,正常手機(jī)FEATURE_APP_WIDGETS是有的,config_enableAppWidgetService為false,也就是說(shuō)手機(jī)上其實(shí)靠有FEATURE_APP_WIDGETS這個(gè)Feature,而車機(jī)上沒有是因?yàn)闆]有FEATURE_APP_WIDGETS這個(gè)Feature
那么我們就要考慮在車載要么 1、添加Feature 2、把config_enableAppWidgetService變成true 2選1即可以,這里我們選擇簡(jiǎn)單一點(diǎn)的方案2,修改如下
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 31229e97024f..f46b0d3a76c0 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3838,7 +3838,7 @@
? ? <!-- True if the device requires AppWidgetService even if it does not have
? ? ? ? ?the PackageManager.FEATURE_APP_WIDGETS feature -->
- ? ?<bool name="config_enableAppWidgetService">false</bool>
+ ? ?<bool name="config_enableAppWidgetService">true</bool>
? ? <!-- True if the device supports Sustained Performance Mode-->
? ? <bool name="config_sustainedPerformanceModeSupported">false</bool>
修改后進(jìn)行整體編譯,即可以有appwidget這個(gè)服務(wù)運(yùn)行于整個(gè)系統(tǒng)了,那樣才可以進(jìn)行下一步的代碼開發(fā)
2、在CarLauncher移植相關(guān)成為WidgetHost的代碼 具體修改步驟如下: 1、準(zhǔn)備好放置widget的layout,修改布局把左邊空出一片區(qū)域,專門來(lái)放置widget 再接下來(lái)就是下圖的幾個(gè)步驟來(lái)實(shí)現(xiàn)

最后再把上面的layout.addView一下上面的mAppWidgetView最后看一下相關(guān)的效果

左邊是不是正常的展示出來(lái)時(shí)鐘小部件 相關(guān)patch請(qǐng)關(guān)注公眾號(hào)私聊我。
引用鏈接
更多車載車機(jī)framework實(shí)戰(zhàn)開發(fā)課程請(qǐng)加千里馬本人wx:androidframework007(備注b站粉絲)