车载桌面加入AppWidget小部件的支持-千里马车载车机android系统实战开发

背景:

原生的aosp车载系统根本就不支持任何的appwidget,但是国内很多车机厂都有广泛适用appwidget的功能。
更多干货实战视频:https://www.bilibili.com/video/BV1ah411d7Y3/
车载桌面加入AppWidget小部件的支持-千里马车载车机android系统实战开发_第1张图片

明显左边的音乐,蓝牙电话等属于其他应用的画面,熟悉android手机同学就肯定知道,这个其实就是手机桌面上的appwidget。

移植小部件展示功能到车载桌面

1、首先确定车载系统是否有appwidget服务

确认方法可以通过如下命令:

emulator_car_x86_64:/ # service list | grep appwidget            

如果系统有相关服务则有如下输出


emulator_car_x86_64:/ # service list | grep appwidget                                                                                                                                
53	appwidget: [com.android.internal.appwidget.IAppWidgetService]

如果没有,则显示一片空白,啥也没有

默认aosp情况其实是没有开放appwidget的,这里我们就需要考虑怎么开放appwidget功能

这里就需要对appwidget的加入servicemanager流程比较清晰:
车载桌面加入AppWidget小部件的支持-千里马车载车机android系统实战开发_第2张图片

其实它是在这里进行的启动加入,但是大家可以看到,这里其实是有判断条件的:

  if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_APP_WIDGETS)
                    || context.getResources().getBoolean(R.bool.config_enableAppWidgetService))

即系统是否有开放FEATURE_APP_WIDGETS或者说有config_enableAppWidgetService配置为true,正常手机FEATURE_APP_WIDGETS是有的,config_enableAppWidgetService为false,也就是说手机上其实靠有FEATURE_APP_WIDGETS这个Feature,而车机上没有是因为没有FEATURE_APP_WIDGETS这个Feature

那么我们就要考虑在车载要么 1、添加Feature 2、把config_enableAppWidgetService变成true
2选1即可以,这里我们选择简单一点的方案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>

修改后进行整体编译,即可以有appwidget这个服务运行于整个系统了,那样才可以进行下一步的代码开发

2、在CarLauncher移植相关成为WidgetHost的代码
具体修改步骤如下:
1、准备好放置widget的layout,修改布局把左边空出一片区域,专门来放置widget
再接下来就是下图的几个步骤来实现
车载桌面加入AppWidget小部件的支持-千里马车载车机android系统实战开发_第3张图片
最后再把上面的layout.addView一下上面的mAppWidgetView

最后看一下相关的效果
车载桌面加入AppWidget小部件的支持-千里马车载车机android系统实战开发_第4张图片

左边是不是正常的展示出来时钟小部件
相关patch请关注公众号私聊我。

你可能感兴趣的:(车载桌面,android,framework,车载车机开发,系统开发面试,widget,小部件,车载桌面)