AOSP-CarLauncher介绍
Car Launcher作为车载Android的桌面启动器,是车载Android的入口应用。
概述
Car Launcher是安卓系统中的桌面启动器,安卓系统的桌面UI统称为Launcher;
Launcher是安卓系统中的主要程序组件之一,安卓系统中如果没有Launcher就无法启动安卓桌面
Car Launcher是android系统的桌面,是用户接触到的第一个带有界面的APP。
它本质上就是一个系统级APP,和普通的APP一样,它界面也是在Activity上绘制出来的。
虽然Car Launcher也是一个APP,但是它涉及到的技术点却比一般的APP要多。
CarLauncher作为IVI系统的桌面,需要显示系统中所有用户可用app的入口,显示最近用户使用的APP,同时还需要支持在桌面上动态显示如地图、音乐在内各个APP内部的信息,在桌面显示地图并与之进行简单的交互。
Car Launcher元素介绍
Car Launcher 代码,可以划分两个领域
1.Car Launcher主要功能区域
2.Car Launcher 协作式 控制 SystemUI 功能区域
如下图,为快捷功能区域和SystemUI
如下图,为CarLauncher区域和SystemUI
【SystemUI区域】:在下方的NaviBar有9个按钮,只有点击[首页]或[App桌面]才会进入Car Launcher
【Car launcher区域】:在上方的大范围区域,基本上就是 Car Launcher区域
Car Launcher代码介绍
android.bp分析
描述Android.bp: 车载CarLauncher的Android.bp比Android.mk更加优秀,他定义CarLauncher的源码结构,和依赖的类库。
注意1:一个属性overrides,它表示覆盖的意思。
在系统编译时Launcher2、Launcher3、Launcher3QuickStep都会被CarLauncher取代,前面三个Launcher并不是车机系统的桌面,车载系统中会用CarLauncher这个定制新的桌面取代掉其它系统的桌面。\注意2:若不想使用系统中自带的CarLauncher,那么也需要在overrides中覆盖掉CarLauncher。
注意3:在自主开发的车载Android系统中这个属性我们会经常用到,用我们自己定制的各种APP来取代系统中默认的APP,比如系统设置等等。
1 | android_app { |
AndroidManifest.xml分析
1 | <application |
AppGridActivity
车载APPGridActivity,目的是展示所有车载系统应用,为车载驾驶的用户提供车载系统操作中心
展示所有的车载应用
车载Launcher中 获取所有APP的方法都集中在AppLauncherUtils
工具类
1 | /** |
AppLauncherUtils中的其他方法
1.LauncherApps.getActivityList() 可以获取List包含了车载所有配置
Intent#ACTION_MAIN 和Intent#CATEGORY_LAUNCHER的Activity信息。2.API操作介绍
String LauncherActivityInfogetLabel() : 获取app的name
String LauncherActivityInfo.getComponentName() : 获取app的Mainactivity信息
Drawable LauncherActivityInfo.getBadgedIcon(0) : 获取App的图标3.涉及到车载多屏
当用户点击图标时,虽然也是通过startActivity启动App,但是ActivityOptions可以让我们决定目标APP在哪个屏幕上启动。1
2
3
4
5
6static void launchApp(Context context, Intent intent) {
ActivityOptions options = ActivityOptions.makeBasic();
// 在当前的车载系统屏幕上启动目标App的Activity
options.setLaunchDisplayId(context.getDisplayId());
context.startActivity(intent, options.toBundle());
}
展示最近使用的车载应用
车载系统中有UsageStatusManager来对设备使用情况历史记录和统计信息的访问,UsageStatusManager使用
android.provider.Settings#ACTION_USAGE_ACCESS_SETTINGS,
注意:
getAppStandbyBucket(),queryEventsForSelf(long,long),方法时不需要添加额外的权限
但是除此以外的方法都需要android.permission.PACKAGE_USAGE_STATS权限才行哦
1 | /** |
快捷功能区域代码
布局
车载系统开机默认启动CarLauncher的onCreate方法&布局文件
接下来看一下横屏的布局文件,源码中其实还包含了竖屏和多窗口的布局
1 | <androidx.constraintlayout.widget.ConstraintLayout |
初始化
车载系统 快捷功能主页的初始化工作,都是在 CarLauncher的onCreate方法中完成的
1 |
|