我正在尝试使用 Android slice 来显示我的应用程序中的数据。
所以我有我的 action.xml
<actions>
<action intentName="actions.intent.START_EXERCISE">
<fulfillment
fulfillmentMode="actions.fulfillment.SLICE"
urlTemplate="content://com.example/hello{?name}">
<parameter-mapping urlParameter="name" intentParameter="exercise.name" required="false" />
</fulfillment>
</action>
在我的 SliceProvider 上,我添加一行只是为了加载时间,并启动一个服务
override fun onBindSlice(sliceUri: Uri): Slice {
val activityAction = createActivityAction()
return if (sliceUri.path == "/hello") {
startPendingIntent()
list(context!!, sliceUri, ListBuilder.INFINITY) {
row {
primaryAction = activityAction
title = "Waiting for real data"
}
}
} else {
list(context!!, sliceUri, ListBuilder.INFINITY) {
row {
primaryAction = activityAction
title = "URI not recognized."
}
}
}
}
fun startPendingIntent(){
val intent = Intent(context, SliceBroadcastReceiver::class.java)
intent.action = "ACTION_NOTIFICATION"
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT)
pendingIntent.send()
}
在我的广播接收器上,我正在开始服务并为我的切片获取数据。当我有数据时,我正在尝试更新切片 - 相同的 url,但现在使用参数
val parse = Uri.parse("uri content://com.example/hello")
.buildUpon()
.appendQueryParameter("name", "Running").build()
applicationContext.contentResolver.notifyChange(parse, null)
但出于某种原因,在 SliceProvider 上,onBindSlice URI 始终是 content://com.example/hello - 这是我在 App 操作测试工具在进程开始时运行 slice 时获得的第一个 URI。