Google Android for Cars的整理Android Automotive OS(一)
程序员文章站
2024-01-09 23:30:04
...
1 Android for Cars介绍
构建可帮助用户在行车过程中通过 Android Automotive OS 和 Android Auto 进行连接的应用
可以分为两类:
-
Android Automotive OS
- 拥有搭载 Android Automotive OS 的车辆的用户可以将应用安装到其车辆的信息娱乐系统中
- Android Automotive OS 是一款 Android 信息娱乐系统,专门内置到了车辆中。车载系统是专为车辆优化的独立 Android 设备。
- 用户不用使用手机应用,而是直接在音响主机上安装驾驶员优化的应用版本。
-
Android Auto :
- Android Auto 提供了针对驾驶员优化的应用体验,适用于使用 Android 手机和 Android Auto 应用但没有 Android Automotive OS 车辆的用户
- 将手机(Android 5.0 或更高版本)连接到兼容的车辆上,
- 如果用户的汽车或售后市场立体音响系统支持 Android Auto,则可以通过连接手机直接在汽车显示屏上使用您的应用。
2 Cars 支持的应用类型
Android Automotive OS 和 Android Auto 并不支持所有类型的应用
-
媒体应用类型
- 构建媒体应用(音乐,电台和有声读物播放器),用户可以将这些应用安装到车辆或者通过手机投影到车内
- 应用允许用户在车内浏览和播放音乐和语音内容
-
即时通讯应用
- 构建即时通讯应用,用于接受传入通知、使用文字转语音阅读消息,并且让用户在行车过程中使用语音通过Android Auto 进行回复
- 允许用户接收传入通知,使用文字转语音功能阅读信息,以及通过车载语音输入发送回复
3 汽车媒体应用构建
1.关键术语和概念
-
媒体浏览服务
媒体应用实现且符合 MediaBrowseServiceCompat API 要求的 Android 服务。应用使用此服务将媒体浏览内容公开给 Android Automotive OS 和 Android Auto。 -
媒体浏览
媒体应用用于将内容公开给 Android Automotive OS 和 Android Auto 的 API。 -
媒体项
媒体浏览树中单个 MediaBrowserCompat.MediaItem 对象。
-
媒体项类型包括:
- 可播放项:这类媒体项表示实际的声音流,如专辑歌曲、图书章节或播客剧集。既可浏览又可播放的媒体项被视为可播放项。
- 可浏览项:这类媒体项将可播放的媒体项整理成组。例如,您可以将多个章节分组为一本图书,将多首歌曲分组为一张专辑,或者将多个剧集分组为一个播客。
-
车辆优化
- 只有在车载用户体验限制 (CUXR) 未生效时才允许显示车辆优化界面,因为这些界面可能需要用户长时间关注或互动。汽车处于停车状态时 CUXR 不起作用,但在汽车行驶时始终有效。
- 遵循 Android Automotive OS 设计指南
- 设计原则包括使用较大的点按目标和字体大小、支持日夜模式以及提高对比度。
2 配置应用的清单文件
需要配置应用的清单文件,以表明您的应用适用于 Android Automotive OS,并且您的手机应用支持 Android Auto 的媒体服务。
- 声明对 Android Automotive OS 的支持
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true"/>
</manifest>
- 声明 Android Auto 媒体支持
<application>
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
<application>
清单条目引用了一个 XML 文件,用于声明您的应用支持的车载功能。要表明您有媒体应用,请将名为 automotive_app_desc.xml 的 XML 文件添加到项目的 res/xml/ 目录中。此文件应包含以下内容:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
-
声明媒体浏览服务
Android Automotive OS 和 Android Auto 均可通过媒体浏览服务连接到您的应用,以便浏览媒体项。在清单中声明媒体浏览服务,以便让 Android Automotive OS 和 Android Auto 能够发现服务并连接到您的应用<application> <service android:name=".MyMediaBrowserService" android:exported="true"> <intent-filter> <action android:name="android.media.browse.MediaBrowserService"/> </intent-filter> </service> <application>
-
构建媒体浏览服务
通过扩展 MediaBrowserServiceCompat 类来创建媒体浏览服务。然后,Android Automotive OS 和 Android Auto 可以使用您的服务执行以下操作 -
浏览应用的内容层次结构,以向用户展示菜单。
-
获取应用的 MediaSessionCompat 对象的令牌,以便控制音频播放
-
媒体浏览服务工作流
Android Automotive OS 和 Android Auto 如何与媒体浏览服务互动
- 用户在 Android Automotive OS 或 Android Auto 中启动您的应用。
- Android Automotive OS 或 Android Auto 使用 onCreate() 方法与应用的媒体浏览服务联系。在 onCreate() 方法的实现中,您必须创建并注册 MediaSessionCompat 对象及其回调对象。
- Android Automotive OS 或 Android Auto 调用服务的 onGetRoot() 方法,以获取内容层次结构中的根媒体项。根媒体项不会显示出来,而是用于从您的应用中检索更多内容。
- Android Automotive OS 或 Android Auto 调用您的服务的 onLoadChildren() 方法来获取根媒体项的子项。Android Automotive OS 和 Android Auto 会将这些媒体项显示为*内容项。*内容项应该是可浏览项。
- 如果用户选择了可浏览媒体项,系统会再次调用您的服务的 onLoadChildren() 方法,以检索所选菜单项的子项。
- 如果用户选择了可播放媒体项,Android Automotive OS 或 Android Auto 会调用相应的媒体会话回调方法来执行该操作。
- 如果您的应用支持,用户还可以搜索您的内容。这时,Android Automotive OS 或 Android Auto 会调用您的服务的 onSearch() 方法。
-
构建内容层次结构
Android Automotive OS 和 Android Auto 调用应用的媒体浏览服务,以查找可用内容。为提供相应支持,您需要在浏览服务中实现 onGetRoot() 和 onLoadChildren() 这两种方法
- 实现 onGetRoot,服务的 onGetRoot() 方法返回有关内容层次结构根节点的信息
- 实现 onLoadChildren() Android Automotive OS 和 Android Auto 会在根节点对象上调用 onLoadChildren() 来获取其子节点,以构建*菜单。客户端应用使用子节点对象调用同一方法来构建子菜单。
- 显示可浏览的搜索结果 onSearch() 来实现搜索
具体的实现需要去参考官方文档 ?
官方链接
-
注册媒体会话
在媒体浏览服务的 onCreate() 方法中,创建 MediaSessionCompat,然后通过调用 setSessionToken() 注册媒体会话
实现播放命令
当用户从您的应用请求播放媒体项时,Android Automotive OS 和 Android Auto 会使用从应用的媒体浏览服务获取的 MediaSessionCompat 对象的 MediaSessionCompat.Callback 类。当用户想要控制内容播放时,例如暂停播放或跳至下一曲目,Android Automotive OS 和 Android Auto 会调用其中一个回调对象的方法。
具体方法:
- onPrepare():在媒体来源改变时调用。Android Automotive OS 也会在启动后立即调用此方法。您的媒体应用必须实现此方法
- onPlay():如果用户在未选择特定项的情况下选择播放,则调用此方法。您的应用应播放其默认内容。如果之前通过 onPause() 暂停了播放,您的应用应继续播放。但是当刚开始链接的时候是不应该播放的
- onPlayFromMediaId() 在用户选择播放特定项时调用。系统会将您的媒体浏览服务为内容层次结构中的媒体项分配的 ID 传递给这个方法
- onPlayFromSearch() 在用户选择从搜索查询中播放时调用。应用应根据传入的搜索字符串做出适当的选择
- onPause() 在用户选择暂停播放时调用。
- onSkipToNext() 在用户选择跳至下一项时调用。
- onStop() 在用户选择停止播放时调用
推荐阅读
-
Google Android for Cars的整理Android Automotive OS(一)
-
整理一下最近Android面试的提问
-
对怎样充分利用安卓官方开发网站的一个简单性介绍介绍-https://developer.android.google.cn/docs/
-
个人整理的android webview的一些适配方案:
-
Android安卓其实是Google下的一剂药
-
一些Android开发过程杂项问题的整理(一)
-
JavaEye新闻频道的第一个新闻专题Google Android发布
-
Google 的 Android 为什么不自主开发一个内核而要用 Linux 内核?
-
Google 的 Android 为什么不自主开发一个内核而要用 Linux 内核?
-
对怎样充分利用安卓官方开发网站的一个简单性介绍介绍-https://developer.android.google.cn/docs/