欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 并不支持所有类型的应用

  • 媒体应用类型

    • 构建媒体应用(音乐,电台和有声读物播放器),用户可以将这些应用安装到车辆或者通过手机投影到车内
    • 应用允许用户在车内浏览和播放音乐和语音内容
  • Google Android for Cars的整理Android Automotive OS(一)

  • 即时通讯应用

    • 构建即时通讯应用,用于接受传入通知、使用文字转语音阅读消息,并且让用户在行车过程中使用语音通过Android Auto 进行回复
    • 允许用户接收传入通知,使用文字转语音功能阅读信息,以及通过车载语音输入发送回复
  • Google Android for Cars的整理Android Automotive OS(一)

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 如何与媒体浏览服务互动

  1. 用户在 Android Automotive OS 或 Android Auto 中启动您的应用。
  2. Android Automotive OS 或 Android Auto 使用 onCreate() 方法与应用的媒体浏览服务联系。在 onCreate() 方法的实现中,您必须创建并注册 MediaSessionCompat 对象及其回调对象。
  3. Android Automotive OS 或 Android Auto 调用服务的 onGetRoot() 方法,以获取内容层次结构中的根媒体项。根媒体项不会显示出来,而是用于从您的应用中检索更多内容。
  4. Android Automotive OS 或 Android Auto 调用您的服务的 onLoadChildren() 方法来获取根媒体项的子项。Android Automotive OS 和 Android Auto 会将这些媒体项显示为*内容项。*内容项应该是可浏览项。
  5. 如果用户选择了可浏览媒体项,系统会再次调用您的服务的 onLoadChildren() 方法,以检索所选菜单项的子项。
  6. 如果用户选择了可播放媒体项,Android Automotive OS 或 Android Auto 会调用相应的媒体会话回调方法来执行该操作。
  7. 如果您的应用支持,用户还可以搜索您的内容。这时,Android Automotive OS 或 Android Auto 会调用您的服务的 onSearch() 方法。
  • 构建内容层次结构
    Android Automotive OS 和 Android Auto 调用应用的媒体浏览服务,以查找可用内容。为提供相应支持,您需要在浏览服务中实现 onGetRoot() 和 onLoadChildren() 这两种方法
  1. 实现 onGetRoot,服务的 onGetRoot() 方法返回有关内容层次结构根节点的信息
  2. 实现 onLoadChildren() Android Automotive OS 和 Android Auto 会在根节点对象上调用 onLoadChildren() 来获取其子节点,以构建*菜单。客户端应用使用子节点对象调用同一方法来构建子菜单。
  3. 显示可浏览的搜索结果 onSearch() 来实现搜索
    具体的实现需要去参考官方文档 ?
    官方链接
  • 注册媒体会话
    在媒体浏览服务的 onCreate() 方法中,创建 MediaSessionCompat,然后通过调用 setSessionToken() 注册媒体会话
    实现播放命令
    当用户从您的应用请求播放媒体项时,Android Automotive OS 和 Android Auto 会使用从应用的媒体浏览服务获取的 MediaSessionCompat 对象的 MediaSessionCompat.Callback 类。当用户想要控制内容播放时,例如暂停播放或跳至下一曲目,Android Automotive OS 和 Android Auto 会调用其中一个回调对象的方法。

具体方法:

  1. onPrepare():在媒体来源改变时调用。Android Automotive OS 也会在启动后立即调用此方法。您的媒体应用必须实现此方法
  2. onPlay():如果用户在未选择特定项的情况下选择播放,则调用此方法。您的应用应播放其默认内容。如果之前通过 onPause() 暂停了播放,您的应用应继续播放。但是当刚开始链接的时候是不应该播放的
  3. onPlayFromMediaId() 在用户选择播放特定项时调用。系统会将您的媒体浏览服务为内容层次结构中的媒体项分配的 ID 传递给这个方法
  4. onPlayFromSearch() 在用户选择从搜索查询中播放时调用。应用应根据传入的搜索字符串做出适当的选择
  5. onPause() 在用户选择暂停播放时调用。
  6. onSkipToNext() 在用户选择跳至下一项时调用。
  7. onStop() 在用户选择停止播放时调用
相关标签: Android