【Audio&Video】Google智能助理和媒体应用(15)

Google智能助理允许您使用语音命令来控制许多设备,例如Google Home,您的手机等。它具有内置的理解媒体命令的能力(“Beyonce播放某些东西”)并支持媒体控制(如暂停,跳过,快进,竖起大拇指)。

助理使用媒体会话与Android媒体应用进行通信。它可以使用 意图或服务来启动您的应用程序并开始播放。为了获得最佳效果,您的应用应该实现此页面上描述的所有功能。

注意:本指南介绍了如何创建媒体应用程序,以便助理可以帮助用户控制其媒体。要了解Android应用程序如何使用Assist API来改善助理用户体验,请参阅 优化助手的内容

使用媒体会话


每个音频和视频应用程序都必须执行 媒体会话, 以便助理可以在播放开始后操作传输控件。

您的应用的媒体会话必须声明其支持的操作,并实施相应的媒体会话回调。在中声明您支持的操作 setActions()。

在 环球音乐播放器 示例项目是如何建立一个媒体会话一个很好的例子。

播放操作
为了从服务开始播放,媒体会话必须具有以下PLAY操作和回调:
【Audio&Video】Google智能助理和媒体应用(15)
你的会议还应该实施这些PREPARE行动和回调:
【Audio&Video】Google智能助理和媒体应用(15)

通过实施准备API,语音命令之后的回放等待时间可以减少。希望改善播放延迟的媒体应用程序可以使用额外的时间来开始缓存内容和准备媒体播放。

如果onPrepare(),onPlay(),onPrepareFromSearch(),或onPlayFromSearch() 称为无搜索查询,您的媒体应用程序应该发挥的“当前”的媒体。如果目前没有媒体,应用程序应该尝试播放某些内容。

请注意,尽管助手只使用本节中列出的操作,但最佳做法是实施所有准备和回放API以确保与其他应用程序的兼容性。

运输控制

应用的媒体会话处于活动状态后,助理可以发出语音命令来控制播放和更新媒体元数据。为了使其工作,您的代码应该启用以下操作并实现相应的回调:
【Audio&Video】Google智能助理和媒体应用(15)
请注意:

为了寻求命令的工作,PlaybackState需要与时俱进state, position, playback speed, and update time。应用程序必须setPlaybackState()在状态改变时调用。
媒体应用程序还必须保持媒体会话元数据保持最新状态。这支持诸如“正在播放什么歌曲?”等问题。应用程序必须setMetadata()在适用的字段(如曲目标题,艺术家和名称)发生更改时致电。
MediaSession.setRatingType()必须设置为指示应用程序支持的评级类型,并且应用程序必须执行onSetRating()。如果该应用不支持评分,则应将评分类型设置为RATING_NONE。

错误
助理处理媒体会话发生时的错误,并将其报告给用户。请确保媒体会话正确更新传输状态和错误代码 PlaybackState,如使用媒体会话中所述。助理识别所有返回的错误代码getErrorCode()。

以意图播放


助手可以启动音频或视频应用程序,并通过发送深层链接意图开始播放。

意图及其深层链接可以来自不同的来源:

当助理启动移动应用程序时,它可以使用Google搜索来检索标记的内容,以便通过链接提供观看操作。
当助理启动电视应用程序时,您的应用程序应包含一个 电视搜索提供程序, 以显示媒体内容的URI。该助手向内容提供者发送查询,该内容提供者应该返回包含用于深度链接的URI和可选操作的意图。如果查询返回意图中的操作,那么助手会将该操作和URI发送回您的应用程序。如果提供者没有指定动作,助理将添加ACTION_VIEW到意图。
该助手将EXTRA_START_PLAYBACK附加值添加true 到它发送给您的应用程序的意图中。当您的应用收到意图时应该开始播放EXTRA_START_PLAYBACK。

注意:如果用户重复请求,助理可能会将设备上的内容提供者的查询结果缓存多达七天,并发送缓存的意图,而不是运行新的查询。这意味着您的应用可能会收到播放不再可用内容的请求。您的应用程序应该优雅地处理这种情况:显示错误消息并让用户返回到您的登陆活动(或者可能是其他相关活动)。

在活动时处理意图

用户可以请求助理在您的应用仍在播放先前请求中的内容时播放内容。这意味着您的应用可以接收新的意图,以在其播放活动已启动并处于活动状态时开始播放。

支持具有深层链接的意图的活动应该重写 onNewIntent() 以处理新的请求。

开始播放时,助理可能会将其他标志添加 到它发送给您的应用程序的意图中。特别是,它可以添加 FLAG_ACTIVITY_CLEAR_TOP或 FLAG_ACTIVITY_NEW_TASK或两者兼而有之。虽然你的代码不需要处理这些标志,但Android系统会响应这些标志。当前一个URI仍在播放时,如果有新的URI的第二个播放请求到达,这可能会影响您的应用程序的行为。在这种情况下测试您的应用如何响应是个好主意。您可以使用adb命令行工具来模拟情况(常量0x14000000是两个标志的布尔按位或):

adb shell 'am start -a android.intent.action.VIEW --ez android.intent.extra.START_PLAYBACK true -d <first_uri>' -f 0x14000000
adb shell 'am start -a android.intent.action.VIEW --ez android.intent.extra.START_PLAYBACK true -d <second_uri>' -f 0x14000000

从服务播放


如果您的应用程序具有 media browser service 允许来自助理的连接,则助理可以通过与服务进行通信来启动应用程序 media session。媒体浏览器服务不应该启动活动。助手将根据PendingIntent您使用setSessionActivity()定义的方式启动您的活动。

注意:目前,助理不使用服务来启动视频应用程序(它以意图启动它们)。但是,为了将来的兼容性,我们强烈建议在视频应用中添加媒体浏览器服务。

确保在初始化媒体浏览器服务时设置MediaSession.Token 。请记住 始终设置支持的播放操作,包括初始化期间。助理期望您的媒体应用程序在助理发送第一个播放命令之前设置播放操作。

要从服务开始,助理实现媒体浏览器客户端API。它执行TransportControls调用,触发应用媒体会话上的PLAY动作回调。

下图显示助理生成的调用顺序和相应的媒体会话回调。(准备回调仅在您的应用支持时发送。)所有呼叫都是异步的。助理不会等待您的应用程序的任何响应。

【Audio&Video】Google智能助理和媒体应用(15)

当用户发出语音命令进行播放时,助理会以短的通知进行回应。宣布完成后,助理会发布PLAY操作。它不等待任何特定的播放状态。

如果您的应用程序支持ACTION PREPARE *操作,则助理会PREPARE在开始通知之前调用该操作。

连接到MediaBrowserService

为了使用服务启动您的应用程序,助理必须能够连接到应用程序的MediaBrowserService并检索其MediaSession.Token。连接请求在服务的onGetRoot() 方法中处理 。有两种方式来处理请求:

接受所有连接请求
仅接受来自助理应用程序的连接请求

接受所有连接请求
您必须返回BrowserRoot以便助理将命令发送到MediaSession。最简单的方法是让所有MediaBrowser应用程序连接到您的MediaBrowserService。您必须返回一个非空BrowserRoot。以下是来自Universal Music Player的适用代码:

@Override
public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid,
                             Bundle rootHints) {

    // To ensure you are not allowing any arbitrary app to browse your app's contents, you
    // need to check the origin:
    if (!mPackageValidator.isCallerAllowed(this, clientPackageName, clientUid)) {
        // If the request comes from an untrusted package, return an empty browser root.
        // If you return null, then the media browser will not be able to connect and
        // no further calls will be made to other media browsing methods.
        LogHelper.i(TAG, "OnGetRoot: Browsing NOT ALLOWED for unknown caller. "
                + "Returning empty browser root so all apps can use MediaController."
                + clientPackageName);
        return new MediaBrowserServiceCompat.BrowserRoot(MEDIA_ID_EMPTY_ROOT, null);
    }

    // Return browser roots for browsing...
}

接受助理应用程序包和签名
您可以通过检查其软件包名称和签名来明确允许助理连接到媒体浏览器服务。您的应用程序将在MediaBrowserService的onGetRoot方法中收到包名称。您必须返回BrowserRoot以便助理将命令发送到MediaSession。在环球音乐播放器样品维护已知包名和签名的列表。以下是Google智能助理使用的软件包名称和签名。

<signing_certificate name="Google" release="false"
                     package="com.google.android.googlequicksearchbox">
    MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYD
    VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4g
    VmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UE
    AxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe
    Fw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzET
    MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4G
    A1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9p
    ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZI
    hvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR
    24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVy
    xW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8X
    W8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC
    69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexA
    cKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkw
    HQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0c
    xb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UE
    CBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMH
    QW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAG
    CSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1Ud
    EwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrP
    zgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXcla
    XjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05a
    IskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+a
    ayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUW
    Ev9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=
</signing_certificate>

<signing_certificate name="Google" release="true"
                     package="com.google.android.googlequicksearchbox">
    MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNV
    BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBW
    aWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4G
    A1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQx
    CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3Vu
    dGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9p
    ZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
    ggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JO
    Rland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/
    8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfY
    wXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LW
    uT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0z
    OHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Yl
    mn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14al
    oXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
    BxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsT
    B0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTAD
    AQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4
    rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCE
    yj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh
    5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTb
    Qe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZM
    cUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK
</signing_certificate>

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【Audio&Video】Google智能助理和媒体应用(15)

猜你喜欢

转载自blog.51cto.com/4789781/2130462