Android 车机 行车娱乐限制设计

逻辑框图

限制条件
  P档下,娱乐限制开启,P档切到非P档,打开的受限应用页面保持不变,若车速超过15km/h并持续5s,此时结束已打开的受限应用进程; 行车娱乐限制功能被触发开启后,行车档时打开USB视频播放、在线视频、视频投屏、视频聊天、车内拍照、视频会议、KTV、游戏类(受限名单之外应用,受限名单由服务端监听下发),在CSD上提示用户"在行车状态下无法使用该应用";如此时以语音打开,语音TTS播报回复"在行车状态下无法使用该应用"。 [DIM-IVI内部接口】行车速度判断使用DHU-DIM的显示车速(IHU项目中使用的信号组为VehSpdindcd)IVI收到数据的单位可能为mph或km/h,按照以下规则转换:1mph=1.609344 km/h
      /**
       * 状态未知
       */
      public static final int UNKNOWN = -1;
      /**
       * 娱乐限制未启用
       */
      public static final int FUNC_OFF = 0;
      /**
       * 娱乐限制已启用,未达到限制条件
       */
      public static final int NO_RESTRICTED = 1;
      /**
       * 娱乐限制已启用,处于D档 (禁止打开应用)
       */
      public static final int RESTRICTED_START = 2;
      /**
       * 娱乐限制已启用,处于D档&速度>15km/h持续5s(禁止打开应用、退出小窗、退出应用回桌面)
       */
      public static final int RESTRICTED_RUNNING = 3;
观察逻辑
  限通过注册内容观察者---- ContentObserver 对特定Uri引起的数据库的变化进行捕获,触发回调,在回调中通过aidl的ICarProperty到达底层getProperty获取相关数据赋值到android.car.hardware.CarPropertyValue。更新当前车辆速度值档位值等关键信息。
(    此uri为CAR_RESTRICTION_SWITCH_URI = Settings.Global.getUriFor(CAR_RESTRICTION_SWITCH_DB_FIELD);  CAR_RESTRICTION_SWITCH_DB_FIELD是数据库中的字段名称,由frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java中的private void loadGlobalSettings(SQLiteDatabase db) ——>loadSetting(stmt, CAR_RESTRICTION_SWITCH_DB_FIELD, 1);进行数据库读取转存到Settings.Global中。  )
 
模块框图
 
模块设计
  系统层面增加FlymeAutoService进程, 行车娱乐限制作为FlymeAutoService的子服务,实现行车娱乐限制相关的策略和接口,通过FlymeAutoSDK对外提供状态获取和监听。在某一系统app的AndroidManifest.xml中配置persistent属性确保自动开机拉起并且死亡后也会自动拉起,并在onCreate函数中为系统添加此进程即可。
 
关键限制流程
 
状态定义
posted @   小汀  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示