Android 16 包含更精細的額外指標 API。這些指標會追蹤輕觸動作,例如按鈕點擊、捲動、曝光次數,以及小工具的大小和位置。
主要 API 為 AppWidgetEvent
。使用 WorkManager
建立週期性工作項目,每小時擷取一次小工具參與度。
請參閱下列程式碼片段,瞭解如何追蹤點擊、捲動和曝光時間長度。
@RequiresApi(Build.VERSION_CODES_FULL.BAKLAVA_1) fun getWidgetEngagementMetrics(context: Context) { val manager = AppWidgetManager.getInstance(context) val endTime = System.currentTimeMillis() val startTime = endTime - (24 * 60 * 60 * 1000) // a day ago val events = manager.queryAppWidgetEvents(startTime, endTime) if (events.isEmpty()) { Log.d(TAG, "No events found for the given time range.") } val metrics = hashMapOf( "clicks" to 0L, "scrolls" to 0L, "totalImpressionLength" to 0L ) for (event in events) { Log.d(TAG, "Event Start: ${event.start}") Log.d(TAG, "Event End: ${event.end}") val widgetId = event.appWidgetId // Tap actions val clickedIds = event.clickedIds if (clickedIds?.isNotEmpty() == true) { metrics["clicks"] = metrics.getValue("clicks") + clickedIds.size // Log or analyze which components were clicked. for (id in clickedIds) { Log.d(TAG, "Widget $widgetId: Tap event on component with ID $id") } } // Scroll events val scrolledIds = event.scrolledIds if (scrolledIds?.isNotEmpty() == true) { metrics["scrolls"] = metrics.getValue("scrolls") + scrolledIds.size // Log or analyze which lists were scrolled. for (id in scrolledIds) { Log.d(TAG, "Widget $widgetId: Scroll event in list with ID/tag $id") } } // Impressions metrics["totalImpressionLength"] = metrics.getValue("totalImpressionLength") + event.visibleDuration.toMillis() Log.d( TAG, "Widget $widgetId: Impression event with duration " + event.visibleDuration.toMillis() + "ms" ) // Position val position = event.position if (position != null) { Log.d( TAG, "Widget $widgetId: left=${position.left}, right=${position.right}, top=${position.top}, bottom=${position.bottom}" ) } } Log.d("WidgetMetrics", "Metrics: $metrics") }
為維護系統健康狀態,系統預設每小時回報一次事件,但裝置製造商可能會變更回報時間範圍。舉例來說,在 Pixel 裝置上,如果使用者在一小時內捲動小工具中的相同清單 10 次,系統只會計為 1 次捲動事件。
如要進行測試,您可以將下列屬性設為指定時間,然後重新啟動測試裝置。在下列範例中,報表視窗設為 0 毫秒,因此系統會立即回報事件。
adb shell device_config override systemui widget_events_report_interval_ms 0
如要為點擊和捲動設定自訂代碼,您可以在版面配置中的檢視區塊上使用 RemoteViews.setAppWidgetEventTag。RemoteViews
查詢包含這個檢視區塊點擊或捲動的 AppWidgetEvents
時,會使用這個整數標記。