如何让 google 助手识别我的自定义意图?
How do I get google assistant to recognize my custom intent?
我的清单中引用了操作 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,我的单位开门了吗?”
如有任何见解,我们将不胜感激。
我认为我对如何支持 Google Assistant 和 Slices 的测试存在误解。
基于下面的 link,我确定我的代码工作正常,并且在部署应用程序之前,应用程序操作将无法测试(在应用程序操作测试工具之外)。
https://github.com/actions-on-google/appactions-fitness-kotlin/issues/8
让我感到困惑的一件事是我在创建应用程序预览时使用的调用名称。我在创建预览时没有输入完整的应用程序名称,因此当我将完整的应用程序名称与 Google 助手一起使用时,无法识别我的查询。
我的清单中引用了操作 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,我的单位开门了吗?”
如有任何见解,我们将不胜感激。
我认为我对如何支持 Google Assistant 和 Slices 的测试存在误解。 基于下面的 link,我确定我的代码工作正常,并且在部署应用程序之前,应用程序操作将无法测试(在应用程序操作测试工具之外)。 https://github.com/actions-on-google/appactions-fitness-kotlin/issues/8
让我感到困惑的一件事是我在创建应用程序预览时使用的调用名称。我在创建预览时没有输入完整的应用程序名称,因此当我将完整的应用程序名称与 Google 助手一起使用时,无法识别我的查询。