Loading...
Loading...
Compare original and translation side by side
androidx.glance.wearGlanceWearWidgetGlanceWearWidgetServiceandroidx.compose.remoteandroidx.glance.wearGlanceWearWidgetGlanceWearWidgetServiceandroidx.compose.remote{GLANCE_WEAR_VERSION}androidx.glance.wear{COMPOSE_REMOTE_VERSION}androidx.compose.remote{WEAR_COMPOSE_REMOTE_VERSION}androidx.wear.compose.remote-alpha-beta-rc./gradlew dependenciescompileSdk = 37buildFeatures { compose = true }{GLANCE_WEAR_VERSION}androidx.glance.wear{COMPOSE_REMOTE_VERSION}androidx.compose.remote{WEAR_COMPOSE_REMOTE_VERSION}androidx.wear.compose.remote-alpha-beta-rc./gradlew dependenciescompileSdk37buildFeatures { compose = true }TileServiceMaterial3TileServiceGlanceWearWidget<service>app/src/main/AndroidManifest.xml@drawable/app/src/main/res/./gradlew :app:assembleDebugTileServiceMaterial3TileServiceGlanceWearWidgetapp/src/main/AndroidManifest.xml<service>app/src/main/res/@drawable/./gradlew :app:assembleDebugGlanceWearWidgetServiceapp/src/main/AndroidManifest.xmlBIND_TILE_PROVIDERBIND_WIDGET_PROVIDER<meta-data>@xml/<wearwidget-provider>SMALLLARGE<container>TileService<service
android:name=".snippets.widget.skill.MyWidgetService"
android:exported="true"
android:permission="com.google.android.wearable.permission.BIND_TILE_PROVIDER">
<intent-filter>
<action android:name="androidx.glance.wear.action.BIND_WIDGET_PROVIDER" />
</intent-filter>
<meta-data
android:name="androidx.glance.wear.widget.provider"
android:resource="@xml/my_widget_info" />
</service>app/src/main/AndroidManifest.xmlGlanceWearWidgetServiceBIND_TILE_PROVIDERBIND_WIDGET_PROVIDER<meta-data>SMALLLARGE<container>@xml/<wearwidget-provider>TileService<service
android:name=".snippets.widget.skill.MyWidgetService"
android:exported="true"
android:permission="com.google.android.wearable.permission.BIND_TILE_PROVIDER">
<intent-filter>
<action android:name="androidx.glance.wear.action.BIND_WIDGET_PROVIDER" />
</intent-filter>
<meta-data
android:name="androidx.glance.wear.widget.provider"
android:resource="@xml/my_widget_info" />
</service>GlanceWearWidgetprovideWidgetDataWearWidgetDocumentGlanceWearWidgetService@AssociateWithGlanceWearWidget// WRONG: Mobile GlanceAppWidget API (don't use on Wear OS)
class BrokenWidget : GlanceAppWidget() {
override suspend fun provideGlance(context: Context, id: GlanceId) {}
}
// CORRECT: Wear OS GlanceWearWidget + GlanceWearWidgetService
@AssociateWithGlanceWearWidget(MyWidget::class)
class MyWidgetService : GlanceWearWidgetService() {
override val widget: GlanceWearWidget = MyWidget()
}
class MyWidget : GlanceWearWidget() {
override suspend fun provideWidgetData(
context: Context,
params: WearWidgetParams,
): WearWidgetData =
WearWidgetDocument(
background = WearWidgetBrush.color(Color(0xFF1C1B1F).rc)
) {
MyWidgetContent(params = params)
}
}GlanceWearWidgetprovideWidgetDataWearWidgetDocumentGlanceWearWidgetService@AssociateWithGlanceWearWidget// WRONG: Mobile GlanceAppWidget API (don't use on Wear OS)
class BrokenWidget : GlanceAppWidget() {
override suspend fun provideGlance(context: Context, id: GlanceId) {}
}
// CORRECT: Wear OS GlanceWearWidget + GlanceWearWidgetService
@AssociateWithGlanceWearWidget(MyWidget::class)
class MyWidgetService : GlanceWearWidgetService() {
override val widget: GlanceWearWidget = MyWidget()
}
class MyWidget : GlanceWearWidget() {
override suspend fun provideWidgetData(
context: Context,
params: WearWidgetParams,
): WearWidgetData =
WearWidgetDocument(
background = WearWidgetBrush.color(Color(0xFF1C1B1F).rc)
) {
MyWidgetContent(params = params)
}
}.rsRemoteString.rcRemoteColor.rdpRemoteDp.riRemoteIntRemoteInt.toRemoteStringparams.containerTypeContainerInfo.CONTAINER_TYPE_SMALLContainerInfo.CONTAINER_TYPE_LARGERemoteBoxRemoteModifier.fillMaxSizeRemoteImageRemoteImageBitmapbitmap.asImageBitmapcornerRadius = 0dpCircleShapeRoundedCornerShaperememberMutableRemoteIntvalueChange(state, newValue)mutableStateOfmutableIntStateOfpendingIntentAction { ctx -> ... }(Context) -> PendingIntentwidget.triggerUpdateAll(context).rsRemoteString.rcRemoteColor.rdpRemoteDp.riRemoteIntRemoteInt.toRemoteStringparams.containerTypeContainerInfo.CONTAINER_TYPE_SMALLContainerInfo.CONTAINER_TYPE_LARGERemoteBoxRemoteModifier.fillMaxSizeRemoteImageRemoteImageBitmapbitmap.asImageBitmapcornerRadius = 0dpCircleShapeRoundedCornerShaperememberMutableRemoteIntvalueChange(state, newValue)mutableStateOfmutableIntStateOfpendingIntentAction { ctx -> ... }(Context) -> PendingIntentwidget.triggerUpdateAll(context)androidx.glance.wear.tooling.previewWearWidgetPreviewSquircleAllWidgetPreviewParamsRoundAllWidgetPreviewParamsRectangularAllWidgetPreviewParamsandroidx.glance.wear.tooling.previewandroidx.glance.wear.testing@PreviewWearWidgetPreview(widget, params)res/drawable-nodpi/RectangularAllWidgetPreviewParams320 dpi<container>SMALLCONTAINER_TYPE_SMALL448x168224x842.67LARGECONTAINER_TYPE_LARGE464x288232x1441.61androidx.glance.wear.tooling.previewandroidx.glance.wear.tooling.previewWearWidgetPreviewSquircleAllWidgetPreviewParamsRoundAllWidgetPreviewParamsRectangularAllWidgetPreviewParamsandroidx.glance.wear.testingWearWidgetPreview(widget, params)@Previewres/drawable-nodpi/RectangularAllWidgetPreviewParams320 dpi<container>SMALLCONTAINER_TYPE_SMALL448x168224x842.67LARGECONTAINER_TYPE_LARGE464x288232x1441.61| Capability or API surface | Reference guide |
|---|---|
| Widget service and manifest reference |
| Remote Compose layouts reference |
| State and actions reference |
| Previews and testing reference |
| 功能或 API 接口 | 参考指南 |
|---|---|
| 小组件 service 与 manifest 参考文档 |
| Remote Compose 布局参考文档 |
| 状态与操作参考文档 |
| 预览与测试参考文档 |
| Legacy or mobile API | Wear OS widget API | Action to take |
|---|---|---|
| | Replace service and annotate with |
| | Return |
| | Build layouts with |
| | Mutate remote state declaratively using |
| | Pass a |
| 旧版或移动端 API | Wear OS 小组件 API | 执行操作 |
|---|---|---|
| | 替换 service,并添加 |
| | 从 |
| | 使用 |
| | 使用 |
| | 向 |
| Symptom | Cause | Fix |
|---|---|---|
Unresolved reference | Missing | Set |
Unresolved reference | Imported | Remove the import; call |
Type mismatch on | Passed bare | Wrap in a lambda: |
Unresolved | Other classes or source sets in the module still use legacy tile APIs | Migrate or update the remaining references before removing legacy |
| 症状 | 原因 | 修复方式 |
|---|---|---|
无法解析 | 缺少 | 将 |
无法解析 | 将 | 移除该导入;将其作为成员方法调用: |
| 传入了裸 | 使用 lambda 包装: |
迁移后仍无法解析 | 模块中的其他类或 source set 仍在使用旧版磁贴 API | 在从 |
./gradlew :app:assembleDebugAndroidManifest.xml@xml/<wearwidget-provider>./gradlew :app:testDebugUnitTest./gradlew :app:assembleDebugAndroidManifest.xml@xml/<wearwidget-provider>./gradlew :app:testDebugUnitTestGlanceAppWidgetAppWidgetProviderGlanceTileServiceTileServicemutableStateOfmutableIntStateOfPendingIntentpendingIntentAction(Context) -> PendingIntentCircleShapeRoundedCornerShape400x400GlanceAppWidgetAppWidgetProviderGlanceTileServiceTileServicemutableStateOfmutableIntStateOfpendingIntentActionPendingIntent(Context) -> PendingIntentCircleShapeRoundedCornerShape400x400com.google.android.wearable.permission.BIND_TILE_PROVIDERandroidx.glance.wear.action.BIND_WIDGET_PROVIDER<service>SMALLLARGE<container>@xml/448x168464x288res/drawable-nodpi/params.containerType@PreviewSquircleAllWidgetPreviewParamsRoundAllWidgetPreviewParams<service>com.google.android.wearable.permission.BIND_TILE_PROVIDERandroidx.glance.wear.action.BIND_WIDGET_PROVIDER@xml/SMALLLARGE<container>res/drawable-nodpi/448x168464x288params.containerTypeSquircleAllWidgetPreviewParamsRoundAllWidgetPreviewParams@Preview