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

《Android 车载 Launcher 开发 - 显示 Widget》 通过本文的介绍,相信读者对 Android 车载 Launcher 开发中显示 Widget 有了更深入的了解和认识,能够在实际开发中更好地实现 Widget 的显示功能,提高车载信息娱乐系统的用户体验。集成的方式可以通过在 Launcher 的代码中添加 Widget 的引用和配置信息,或者通过使用第三方的 Widget 框架来实现。除了使用系统提供的 Widget 和开发自定义 Widget 之外,还可以使用第三方的 Widget 框架来实现 Widget 的显示。 阅读详情

背景:

原生的aosp车载系统根本就不支持任何的appwidget,但是国内很多车机厂都有广泛适用appwidget的功能。
更多干货实战视频:https://www.bilibili.com/video/BV1ah411d7Y3/
在这里插入图片描述

明显左边的音乐,蓝牙电话等属于其他应用的画面,熟悉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流程比较清晰:
在这里插入图片描述

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

  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
再接下来就是下图的几个步骤来实现
在这里插入图片描述
最后再把上面的layout.addView一下上面的mAppWidgetView

最后看一下相关的效果
在这里插入图片描述

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

长短期记忆网络(Long Short-Term Memory networks, LSTM) 如何简单的理解LSTM——其实没有那么复杂: 阅读详情

相关推荐

Burp靶场实战:JWT签名绕过漏洞分析与利用

本文通过Burp Suite靶场实战,深入剖析了JWT签名绕过漏洞的多种攻击手法,包括签名未验证、alg:none攻击、弱密钥爆破、JWK/JKU头注入、KID路径遍历及算法混淆攻击。文章详细演示了利用过程,并提供了关键的防御指南,帮助开发和安全人员加固JWT实现,确保认证安全。

weixin_29325515的博客 595

千里马2024年终总结-android framework实战

心里焦虑加大了,需要调节好平常心面对创业以来最大感受就是“创业艰难”,原本预想的很美好,终于可以有勇气为了理想和兴趣奋斗了,一定是每天满怀激情的干。实际情况是:当自己的兴趣与谋生的收入挂钩时候,一切变得不那么理想和美好。每天还是会有担心自己课程的销售情况,必然就会有焦虑,这种心态和上班兼职搞完全不是一回事。所以心态上确实是相比以前有焦虑一些,这个部分做的不够好。时间不够用创业初期,也没有很多资金搞团队,大部分工作都落到我的头上,比如一些售前咨询,课程研发录制,答疑服务等。

learnframework的博客 2003

【XR技术介绍】深度解析|AI眼镜核心技术架构:从硬件层到端云AI全链路拆解

本文将逐层拆解AI眼镜完整技术架构,梳理硬件、感知、光学、端侧AI、软件云端五大核心层级,剖析核心数据流与行业技术瓶颈,同时附上标准化技术架构图,适合技术学习、方案汇报、行业科普使用。

houdou112358的博客 435

千里马2023年终总结-android framework实战

2023年开始全职做课程后,有了更多时间投入到framework的课程研发,可以把在公司里面的很多丰富经验都放到课程中来分享给大家。大专题课程都是经过非常严格的调研,主要调研因素有以下几个:1、这个专题课程马哥自己是不是有这方面比较深入的经验分享,比如马哥经常在公司里面处理wms闪黑等疑难问题,这类经验属于不太可能从网络学得到的,也基本上很少程序员知道也不可能外传的有用“绝招”,这种在我课程里会毫无保留地分享给大家。

learnframework的博客 2584

AI数字人直播带货全攻略:从零搭建到高效运营

本文提供了一份从零开始搭建与运营AI数字人直播间的完整指南。详细解析了AI数字人直播带货的核心价值与适用场景,并分步讲解了硬件准备、软件选择、数字人创建、话术编排、OBS推流设置及开播测试等关键环节。最后,文章还分享了高效运营策略与常见避坑指南,旨在帮助商家利用AI技术实现降本增效,打造24小时不间断的智能带货直播间。

weixin_29269441的博客 2235

保姆级教程:用SSH手动重建黑群晖RAID1阵列,修复‘存储空间损毁’

本文提供了一份详细的SSH手动重建黑群晖RAID1阵列的教程,帮助用户修复‘存储空间损毁’问题。通过深入解析mdadm软RAID的底层逻辑,从诊断到重建的全过程,确保用户能够掌握黑群晖存储池的修复技术。适用于技术爱好者和系统管理员。

weixin_30319153的博客 293

千里马android framework开发解决Accessing hidden method限制,让应用访问隐藏方法(需要可以修改系统源码方案)

hi,粉丝朋友们大家好! 今天来给大家分享一下,就是经常大家会做安卓系统开发工作问到一个问题,那就是我如果framework代码中增加了一个方法啥的,但是我又不想公开给第三方应用知道,只想让我系统的应用知道,那该怎么办呢?其实这个时候经常就会用到一个hidden的标签,来代表这个方法是隐藏方法,隐藏方法就是给系统内部用的,意味着第三方app就无法使用。这个其实也很常见,自从android p开始android系统就开始对访问hidden的限制越来越严格,虽然我们网络上有各种奇葩招来逃避不允许调用hidden

learnframework的博客 1万+

扫码器USB键盘报告描述符数据格式解析

Byte0用于判断Shift是否按下,当按下时Byte0的Bit1会置1,即0x02,若未按下,Bit为0,即0x00。0x00 0x00 0x00 0x00 0x00 0x00 0x00--->>未按下Shift。0x00 0x00 0x00 0x00 0x00 0x00 0x00--->>按下Shift。0x00 0x04 0x00 0x00 0x00 0x00 0x00--->>输出A。0x00 0x04 0x00 0x00 0x00 0x00 0x00--->>输出a。

m0_65548585的博客 1142

千里马Android Framework实战课程-应用程序app的Binder启动篇

上一个学习专题zygote启动app进程时候,有简单讲过一下binder启动,但没有详细进行分析。这一节进行重点详细分析。 ProcessState的启动 sp<ProcessState> ProcessState::self() { Mutex::Autolock _l(gProcessMutex); if (gProcess != nullptr) { return gProcess; } gProcess = new ProcessState

learnframework的博客 3075

040、全志V853低功耗AI视觉平台的ISP调优——电池供电场景下的画质与功耗平衡

本文分享了全志V853 AI视觉平台在电池供电场景下的ISP调优经验。作者通过实际项目踩坑案例,揭示了V853 ISP的特殊性:不同于主流平台,其ISP与CPU共享时钟域,降噪能力有限,需特别注意功耗控制。关键优化策略包括:关闭无效ISP模块、优化Sensor联动时钟、采用场景自适应配置、开发快速启动模式等。特别指出V853个体差异大,量产需考虑高低温影响。文章强调V853的ISP功耗优化需从寄存器级别精打细算,不能简单套用其他平台经验,建议选型时单独评估ISP功耗,避免续航缩水。

zzfmlxs的博客 26

树根互联Java开发面试题及参考答案

说一下 Java 集合类。 Java 集合类是用于存储和操作一组对象的容器。它提供了多种数据结构,方便程序员对数据进行高效的管理和处理。 Java 集合框架主要包括两大接口:Collection 和 Map。 Collection 接口是一组对象的集合,它有三个主要的子接口:List、Set 和 Queue。 List 接口代表有序的集合,可以包含重复的元素。例如 ArrayList,它是基于数组实现的动态数组。它的优点是随机访问效率高,通过索引访问元素的时间复杂度为 O (1)。当

大模型大数据攻城狮的专栏 856

千里马android framework车机车载手机智能驾驶双屏互动实现方案

这个就是没有动画版本的双屏互动,功能其实也是实现的,但是体验是不是感觉起来差的太多,而且还带有黑屏。2、画面A的平移,两个屏幕都要进行显示,这个难度较大,得考虑好相关的画面怎么都可以显示在两个屏幕。这里其实不需要写代码,可以直接调用am display相关的命令即可以实现这个方法的调用。不过还好的是功能可以用,那么我们也根据wms课程基础后也来实现一下这个双屏互动的功能。1、多指全局动作监听,而不是在某个app的onTouch里面监听,这里其实之前的。

learnframework的博客 5967

【软件系统架构】系列五:TCP/IP 协议栈

TCP/IP协议栈是现代网络通信的核心框架,采用分层架构设计,包含应用层、传输层、网络层和网络接口层四层结构。应用层提供HTTP、FTP等用户服务接口;传输层通过TCP/UDP实现端到端通信;网络层负责IP寻址和路由选择;网络接口层处理物理数据传输。数据在传输过程中经历层层封装,从应用层报文最终转换为物理层的比特流。该协议栈通过三次握手建立连接、数据传输、四次挥手断开连接的流程,确保可靠通信。作为互联网的基础,TCP/IP协议栈具有跨平台、标准化和可扩展的特点,广泛应用于各类网络设备和嵌入式系统中。

moton2017的博客 2163

千里马android binder深入分析-承上启下的native层(客户端部分)

csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论 android跨进程通信实战视频课程(加群获取优惠) 相信大家对上面这一副binder跨进程通信的图都应该比较熟悉,图中的主要有4个角色: 1、客户端(A进程) 2、SerivceManager 3、服务端(B进程) 4、binder驱动 平时一问到binder是怎么跨进程通信的?那么同学们肯定大部分回答:binder最后调到底层还是通过binder驱动来实现跨进程通信的。那么这里就要问一下:请问android中ap

liaosongmao1的专栏 596

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

千里马Android Framework实战开发-跨进程通信专题博客总结

千里马Android Framework实战开发-跨进程通信专题课表介绍 因为课程还剩下最后一部分binder驱动没有讲完,但是粉丝同学们已经迫不及待想要要提前看,这里就先分享一个课表给大家,提醒一下,课表的很大,你忍一下。。。。。 预计一星期左右可以上线全部视频,大家敬请期待课程杀青 ...

learnframework的博客 4279

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android车载Launcher开发(1) - 显示Widget

Android launcher开发,讲述如何显示其他app的widget到launcher上

NYSM239的博客 8533

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HIDL实战开发-千里马android framework车载车技手机系统开发

上面default默认生成的bp是so,这里要把他变成可执行的服务,需要增加一个service.cpp作为main方法载体。需要在自己设备目录找到自己的manifest.xml然后加入自己的hidl。5、添加service.cpp,自启动rc,修改Android.bp。4、生成一个自动生成 hal 接口的 Android.bp。6、需要搞个test,来测试一下服务是否ok,这个时候需要。主要目的是把test目录的Android.bp可以加入编译。执行后生成如下Test.cpp,Test.h文件了。

learnframework的博客 2975

桌面显示组件:AppWidget添加自己的快捷方式

玩转AppWidget                 使用安卓的时候相信大家一定还记得快捷方式的运用,就是将一些经常用的软件拖到桌面上以方便操作。例如qq快捷联系人,音乐快捷播放器之类的而这些肯定有一个支持其运行的程序,这些程序必须通过AppWidget组件来完成。   AppWidgetProvider:继承自BroadcastReceiver,在App Widget应用upd...

u012763405的博客 604

千里马android framework实战开发-binder驱动之oneway导致的transaction failed

csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论 android跨进程通信实战视频课程(加群获取优惠) 千里马android framework实战开发-binder驱动之oneway导致的transaction failed 首先来看错误: 06-15 12:10:36.686 31395 31507 W System.err: android.os.DeadObjectException: Transaction failed on small parcel; r

liaosongmao1的专栏 2276

千里马Android手机大厂Framework系统-Input系统专题实战课

3、学习的探究性更加深入:网络的空间很大,当学生在遇到问题时,可以在网上与同专业,甚至不同专业的学生进行交流,还可以上网查找资料。4、学生学习的多向性:网络背景下学习是一种多向的信息交流活动,学生在获取不同的资源时可以进行比较,集思广益,相互之间取长补短,学习的知识也不再仅仅是书本上的死内容,而是更加灵活,取之有道。2、学生非限性学习:网络学习的学生不受年龄的限制,同时,在时间和空间上也少了许多限制,可以说网络发达的现在,随时随地都可以网上学习。挥自己的聪明才智,相互帮助、促进,更好的解决问题。

2401_89325489的博客 405

千里马Android Framework实战开发-native程序之间binder通信实战案例分析

csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论 android跨进程通信实战视频课程(加群获取优惠) 千里马Android Framework实战开发-native程序之间binder通信实战案例分析 1、需求背景 在android系统开发中,不仅仅我们都停留在java层面,很可能也会遇到比如一些native的可执行程序,比如surfaceflinger,bootanimation等他们都是native的执行程序,这些程序之间也经常会有要进行binder跨进程通信的

liaosongmao1的专栏 633

千里马Android Framework实战开发-Binder通信之startActivity跨进程源码分析

上节课我们已经讲解完了Binder常见使用的一些方法,下面这节课我们来讲解一些Binder跨进程通信在平时Framework及SystemServer源码分析场景。 (注意这个分析是基于我们的android 10,因为课程上讲过android 8.1,也相对比较清楚了,这里blog就单独写一下android 10,因为和8.1有一些差异,这样可以多学习到android 10的情况) 首先我们来看一副图: 1、 startActivity源码分析 上面是不是我们常见的一种App与系统SystemServer

learnframework的博客 1022

Android 经典hal开发实战-千里马android framework车载车机手机系统开发

上面的load方法就是我们说的hardware动态性的关键,它是在运行时候才真正依赖具体硬件抽象so,编译期间只需要依赖公共的hardware相关公共类既可以,不需要so,所以这里就给硬件抽象提供商带来很大灵活性,哪怕硬件厂商不提供也一般会有一个default的so保证不会产生什么严重的崩溃和强依赖问题,大大减低了aosp的代码对于硬件抽象的各个厂商的耦合性。在结构体 hw_module_methods_t 中只有一个成员,它是一个函数指针,名字是open,它主要作用就是用来打开硬件抽象层中给的硬件设备。

learnframework的博客 2783

Android:AppWidget放到桌面上

           今天接到部门头头给下达的一个任务:研究如何让桌面上的AppWidget不能删除。仔细研究AppWidget包的文档后发现,如果不修改桌面程序的代码不可能实现。OK,那就看看桌面程序的源代码吧。           Android中默认桌面的代码包为com.android.launcher。          分析代码结构,首先是分析AndroidManifest.xml文件,看看哪个类是桌面程序的入口。在该文件中发现如下代码。  1 2android:name="Launcher" 3

潇湘夜雨的专栏 2172

RE: 从零开始的车载Android HMI(二) - Widget

Widget,又叫“微件”、“小部件”。小部件是放置在主屏幕(Launcher)上的Android应用程序的小工具或控件。通过小部件可以将自己喜欢的应用程序放在主屏幕上,以便快速访问它们或是显示一些重点信息。............

linkwj的博客 2721

代码方式桌面添加AppWidget

前段时间做了个桌面的widget,第一次接触AppWidget,遇到了不少问题,今天整理下和大家探讨下.   至于AppWidget的有些基础知识,我在这里就不多说了,大家有什么不明白,随便百度下,就有很多答案.今天主要说一下我在往桌面上添加时遇到的问题.      如图所示,中间的Recommended就是一个appwidget添加在桌面上.下面我们就来说说添加的流程.   首先,上面的

So_Strange的博客 4825
上一篇: android 车载widget小部件部分详细源码实战开发-千里马车载车机framework开发实战课程
下一篇: Android Framework开发rom实战合集课表/车载车机手机高级系统开发工程必会技能
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值