ข้อกำหนดเบื้องต้นและการตั้งค่า
ก่อนที่จะเริ่มต้น โปรดตรวจสอบว่าสภาพแวดล้อมของคุณเป็นไปตามข้อกำหนดต่อไปนี้
ข้อกำหนดของรันไทม์
วิดเจ็ต Wear ต้องใช้ 1.6.1 ขึ้นไป ของ
com.google.android.wearable.protolayout.renderer APK ในอุปกรณ์เป้าหมาย
ดาวน์โหลดเวอร์ชันของโปรแกรมแสดงผลที่เข้ากันได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
- โปรแกรมจำลอง Wear OS 7: ใช้อิมเมจโปรแกรมจำลอง Wear OS 7 ไม่เหมาะสำหรับเวอร์ชันที่ต่ำกว่า 7 ดูวิธีการตั้งค่าได้ที่ตั้งค่าโปรแกรมจำลอง Wear OS 7
- อุปกรณ์จริง: ใช้อุปกรณ์ Wear OS จริงที่ได้รับการอัปเดตอัตโนมัติ จาก Google Play Store หรืออุปกรณ์สำหรับนักพัฒนาแอปที่ลงชื่อเข้าใช้ Google Play Store
หากต้องการตรวจสอบเวอร์ชันที่ติดตั้งในอุปกรณ์ ให้ใช้คำสั่งต่อไปนี้ command:
adb shell dumpsys package com.google.android.wearable.protolayout.renderer | \
grep -m 1 versionName | \
awk -F= '{print $2}'
การกำหนดค่า Gradle
ไลบรารีวิดเจ็ต Wear พร้อมให้บริการใน Google Maven
1. กำหนดค่าเวอร์ชัน SDK
ตรวจสอบว่าตั้งค่า compileSdk และ targetSdk เป็น 37 ขึ้นไป
android {
compileSdk = 37
// ...
defaultConfig {
targetSdk = 37
// ...
}
}
2. เพิ่มการขึ้นต่อกัน
รวมทรัพยากร Dependency ต่อไปนี้ไว้ในไฟล์ build.gradle.kts ของแอป
ดึงดูด
dependencies { // Core Wear Widget and Remote Compose libraries implementation "androidx.compose.remote:remote-creation-compose:1.0.0-alpha19" implementation "androidx.compose.remote:remote-core:1.0.0-alpha19" implementation "androidx.glance.wear:wear:1.0.0-alpha18" implementation "androidx.glance.wear:wear-core:1.0.0-alpha18" implementation "androidx.wear.compose.remote:remote-material3:1.0.0-alpha11" // Tooling for previews (optional, but recommended) implementation "androidx.compose.remote:remote-tooling-preview:1.0.0-alpha19" implementation "androidx.wear.compose:compose-ui-tooling:1.6.2" implementation "androidx.wear.tiles:tiles-tooling-preview:1.6.2" debugImplementation "androidx.wear.tiles:tiles-renderer:1.6.2" }
Kotlin
dependencies { // Core Wear Widget and Remote Compose libraries implementation("androidx.compose.remote:remote-creation-compose:1.0.0-alpha19") implementation("androidx.compose.remote:remote-core:1.0.0-alpha19") implementation("androidx.glance.wear:wear:1.0.0-alpha18") implementation("androidx.glance.wear:wear-core:1.0.0-alpha18") implementation("androidx.wear.compose.remote:remote-material3:1.0.0-alpha11") // Tooling for previews (optional, but recommended) implementation("androidx.compose.remote:remote-tooling-preview:1.0.0-alpha19") implementation("androidx.wear.compose:compose-ui-tooling:1.6.2") implementation("androidx.wear.tiles:tiles-tooling-preview:1.6.2") debugImplementation("androidx.wear.tiles:tiles-renderer:1.6.2") }
สร้างวิดเจ็ต Hello World
วิดเจ็ต Wear ประกอบด้วยบริการที่ขยาย
GlanceWearWidgetService และคลาสวิดเจ็ต
ที่ขยาย GlanceWearWidget คุณกำหนด UI โดยใช้ฟังก์ชัน @RemoteComposable
กำหนดบริการ
บริการคือจุดแรกเข้าที่ระบบเชื่อมโยง
หากต้องการกำหนดวิดเจ็ต ให้สร้างบริการที่ขยาย GlanceWearWidgetService
และใส่คำอธิบายประกอบด้วย
@AssociateWithGlanceWearWidget
เพื่อเชื่อมโยงบริการกับคลาส GlanceWearWidget ที่เหมาะสม
@AssociateWithGlanceWearWidget(HelloWidget::class) class HelloWidgetService : GlanceWearWidgetService() { override val widget: GlanceWearWidget = HelloWidget() }
กำหนดวิดเจ็ต
คลาสวิดเจ็ตจะให้ข้อมูลและเลย์เอาต์สำหรับวิดเจ็ต
class HelloWidget : GlanceWearWidget() { override suspend fun provideWidgetData( context: Context, params: WearWidgetParams, ): WearWidgetData { return WearWidgetDocument( background = WearWidgetBrush.color(Color.Blue.rc), ) { HelloWidgetContent() } } }
กำหนดเนื้อหา
เนื้อหาสร้างขึ้นโดยใช้คอมโพเนนต์ Remote Compose
@RemoteComposable @Composable fun HelloWidgetContent() { RemoteBox( modifier = RemoteModifier.fillMaxSize(), contentAlignment = RemoteAlignment.Center, ) { RemoteText( text = "Hello World".rs, color = Color.White.rc, ) } }
แสดงตัวอย่างวิดเจ็ตใน Android Studio
คุณดูตัวอย่างเลย์เอาต์วิดเจ็ตได้โดยตรงในแผงออกแบบของ Android Studio โดยใช้ androidx.glance.wear:wear-tooling-preview
ชุดการแสดงตัวอย่างที่กำหนดไว้ล่วงหน้า
wear-tooling-preview ไลบรารีมีชุดทดสอบที่กำหนดไว้ล่วงหน้า
PreviewParameterProviderเพื่อทดสอบเลย์เอาต์ในรูปร่างคอนเทนเนอร์และการกำหนดค่าอุปกรณ์ต่างๆ
- ชุดสี่เหลี่ยมขอบมน (
SquircleAllWidgetPreviewParams): คอนเทนเนอร์สี่เหลี่ยมผืนผ้ามุมมน - Round Suite (
RoundAllWidgetPreviewParams): คอนเทนเนอร์รูปทรงแคปซูล - ชุดสี่เหลี่ยมผืนผ้า (
RectangularAllWidgetPreviewParams): คอนเทนเนอร์สี่เหลี่ยมผืนผ้าที่ไม่ได้ครอบตัด พร้อมการเว้นที่ว่างที่ปลอดภัย รูปภาพที่สร้างขึ้นด้วยการกำหนดค่าตัวอย่างนี้เหมาะสำหรับใช้เป็นรูปภาพตัวอย่างที่ฝังใน APK ซึ่งเครื่องมือเลือกวิดเจ็ตใช้ (ดูสร้างชิ้นงานรูปภาพตัวอย่าง)
หากต้องการดูตัวอย่างวิดเจ็ตใน Android Studio ให้ใช้ @WearWidgetPreview
@Preview @Composable fun HelloWidgetPreview( @PreviewParameter(SquircleAllWidgetPreviewParams::class) params: WearWidgetParams, ) { WearWidgetPreview( widget = HelloWidget(), params = params, ) }
สร้าง XML การกำหนดค่าวิดเจ็ต
สร้างไฟล์ใหม่ res/xml/hello_widget_info.xml เพื่อกำหนดพร็อพเพอร์ตี้และขนาดที่รองรับของวิดเจ็ต
ดูข้อมูลอ้างอิงทั้งหมดของแอตทริบิวต์ XML ที่รองรับในแท็ก <wearwidget-provider> ได้ในเอกสารประกอบของ WearWidgetProviderInfo
<wearwidget-provider description="@string/hello_widget_description" icon="@mipmap/ic_launcher" label="@string/hello_widget_label" preferredType="SMALL"> <container type="SMALL" previewImage="@drawable/widget_preview_small" /> <container type="LARGE" previewImage="@drawable/widget_preview_large" /> </wearwidget-provider>
สร้างชิ้นงานรูปภาพตัวอย่าง
แอตทริบิวต์ previewImage ขององค์ประกอบ <container> อ้างอิงชิ้นงาน Drawable
ที่แสดงในเครื่องมือเลือกวิดเจ็ตของระบบ หากต้องการสร้างชิ้นงานตัวอย่างที่มีขอบเขตและความหนาแน่นที่ถูกต้อง
ให้ใช้ตัวอย่าง Android Studio กับ
RectangularAllWidgetPreviewParams (ซึ่งจะสร้างชิ้นงานตัวอย่างสำหรับทั้งคอนเทนเนอร์ขนาดเล็กและขนาดใหญ่)
และระบุความหนาแน่นของจอแสดงผลสมาร์ทวอทช์เป็น 320 DPI
@Preview( name = "Widget Preview Asset", device = "spec:width=1000dp,height=1000dp,dpi=320", ) @Composable fun HelloWidgetCatalogPreview( @PreviewParameter(RectangularAllWidgetPreviewParams::class) params: WearWidgetParams, ) { WearWidgetPreview( widget = HelloWidget(), params = params, ) }
หากต้องการแยกรูปภาพตัวอย่างที่แสดงผล ให้ทำตามขั้นตอนต่อไปนี้
- ใน Android Studio ให้เปิดพื้นที่ Design สำหรับ Composable ตัวอย่าง
- ในหน้าต่างแสดงตัวอย่าง ให้คลิกขวาที่ตัวอย่างที่แสดงผลหรือใช้แถบเครื่องมือแสดงตัวอย่างเพื่อเลือกคัดลอกรูปภาพหรือบันทึกรูปภาพ หรือจะใช้เครื่องมือ CLI หรือสคริปต์อัตโนมัติเพื่อดึงตัวอย่าง Compose ก็ได้
- บันทึกไฟล์รูปภาพขนาดเล็กและขนาดใหญ่ลงใน
res/drawable-nodpi/ไดเรกทอรีของแอป เช่นres/drawable-nodpi/widget_preview_small.pngและres/drawable-nodpi/widget_preview_large.png
ลงทะเบียนใน AndroidManifest.xml
ลงทะเบียนบริการใน AndroidManifest.xml ด้วยตัวกรอง Intent และข้อมูลเมตาที่จำเป็น
<service android:name=".snippets.widget.HelloWidgetService" android:exported="true" android:icon="@mipmap/ic_launcher" android:label="@string/hello_widget_label" android:permission="com.google.android.wearable.permission.BIND_TILE_PROVIDER"> <intent-filter> <action android:name="androidx.glance.wear.action.BIND_WIDGET_PROVIDER" /> <!-- If you already have a Tile, omit the following line. --> <action android:name="androidx.wear.tiles.action.BIND_TILE_PROVIDER" /> </intent-filter> <meta-data android:name="androidx.glance.wear.widget.provider" android:resource="@xml/hello_widget_info" /> <meta-data android:name="androidx.wear.tiles.PREVIEW" android:resource="@drawable/tile_preview" /> </service>
สร้างและติดตั้งใช้งาน
หลังจากกำหนดบริการและวิดเจ็ตแล้ว คุณจะสร้างโปรเจ็กต์และติดตั้งใช้งาน ในอุปกรณ์หรือโปรแกรมจำลองได้
สร้างและติดตั้ง
สร้างโปรเจ็กต์และติดตั้ง APK ที่แก้ไขข้อบกพร่องลงในอุปกรณ์ที่เชื่อมต่อหรือโปรแกรมจำลองโดยทำดังนี้
./gradlew :app:installDebug
เพิ่มและแสดงตัวอย่างวิดเจ็ต
หลังจากติดตั้งแอปแล้ว ให้ใช้ adb เพื่อเพิ่มวิดเจ็ตลงในภาพสไลด์และแสดงบนหน้าจอแบบเป็นโปรแกรม
หมายเหตุ: วิดเจ็ต Wear ใช้โครงสร้างพื้นฐานของไทล์ที่อยู่เบื้องหลังเพื่อวัตถุประสงค์ในการแก้ไขข้อบกพร่อง
ด้วยเหตุนี้ คำสั่ง adb จึงต้องมีการดำเนินการ add-tile และ show-tile
1. เพิ่มวิดเจ็ตลงในภาพสไลด์โดยทำดังนี้
adb shell am broadcast \
-a com.google.android.wearable.app.DEBUG_SURFACE \
--es operation add-tile \
--ecn component <your_package_name>/.HelloWidgetService
2. แสดงวิดเจ็ต
adb shell am broadcast \
-a com.google.android.wearable.app.DEBUG_SYSUI \
--es operation show-tile \
--ei index 0
อัปเดตเนื้อหาวิดเจ็ตแบบเป็นโปรแกรม
เมื่อข้อมูลพื้นฐานของแอปมีการเปลี่ยนแปลง (เช่น ได้รับการซิงค์ข้อมูล พุช การแจ้งเตือน หรือการดำเนินการของผู้ใช้) ให้แจ้งระบบเพื่อรีเฟรชเนื้อหาของวิดเจ็ต
หากต้องการขออัปเดตอินสแตนซ์ที่ใช้งานอยู่ทั้งหมดของวิดเจ็ต ให้เรียกใช้
triggerUpdateAll ในคลาสวิดเจ็ต
// Request a content update for all active HelloWidget instances
HelloWidget().triggerUpdateAll(context)
หากต้องการอัปเดตอินสแตนซ์วิดเจ็ตที่เฉพาะเจาะจงโดยไม่ต้องรีเฟรชอินสแตนซ์ที่ใช้งานอยู่ทั้งหมด
ให้เรียกใช้ triggerUpdate ด้วยรหัสอินสแตนซ์เป้าหมาย