0

我的清单以及切片提供程序中引用了操作 xml

<application>
  <meta-data
    android:name="com.google.android.actions"
    android:resource="@xml/actions" />


<provider
      android:name=".sliceproviders.MyAppSliceProvider"
      android:authorities="com.company.app"
      android:exported="true"
      android:grantUriPermissions="true">
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.app.slice.category.SLICE" />
      </intent-filter>
    </provider>

</application>

我的操作 xml 引用了我的切片 uris 和我的查询模式

<actions>
  <action
    intentName="custom.actions.intent.UNIT_STATUS"
    queryPatterns="@array/UnitStatusQueries">
    <fulfillment
      fulfillmentMode="actions.fulfillment.SLICE"
      urlTemplate="content://com.company.app/unit_status" />
  </action>
</actions>

将鼠标悬停在 UnitStatusQueries 上时,我看到了字符串数组中的值

  <string-array name="UnitStatusQueries">
    <item>View unit status</item>
    <item>What is the status of my unit?</item>
    <item>Is my unit open?</item>
  </string-array>

我已授予助理权限

 @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    private fun grantAssistantPermissions() {
        getAssistantPackage()?.let { assistantPackage ->
            val sliceProviderUri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_CONTENT)
                .authority("com.company.app")
                .build()
            androidx.slice.SliceManager.getInstance(this)
                .grantSlicePermission(assistantPackage, sliceProviderUri)
        }
    }


    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    private fun getAssistantPackage(): String? {
        val resolveInfoList = packageManager?.queryIntentServices(
            Intent(VoiceInteractionService.SERVICE_INTERFACE), 0
        )
        return resolveInfoList?.firstOrNull()?.serviceInfo?.packageName
    }

自从运行 Google Assistant 测试工具和 App Actions 测试工具正确显示 Google Assistant 中的切片后,我确信我的切片提供程序可以正常工作。

难题的最后一块实际上是让 Google 助理识别查询并显示我的切片(在测试工具之外)。我已经为内部测试部署了几个版本,但似乎没有任何效果。每次我尝试使用其中一个调用短语时,我都会得到搜索结果或应用程序打开。我尝试过以下组合:“嘿 google,打开 [我的应用程序] 并查看单元状态”“嘿 google,查看单元状态”“嘿 google,我的单元打开了吗?”

任何见解将不胜感激。

4

1 回答 1

0

我认为我对如何支持 Google Assistant 和 Slices 的测试存在误解。根据下面的此链接,我确定我的代码工作正常,并且在部署应用程序之前,应用程序操作将无法测试(在应用程序操作测试工具之外)。 https://github.com/actions-on-google/appactions-fitness-kotlin/issues/8

让我感到困惑的一件事是我在创建应用预览时使用的调用名称。创建预览时我没有输入我的完整应用程序名称,因此当我在 Google 助理中使用完整的应用程序名称时,我的查询无法识别。

于 2022-01-25T17:58:50.397 回答