DataItem
กำหนดอินเทอร์เฟซที่ระบบจะใช้เพื่อซิงค์ข้อมูลระหว่างอุปกรณ์พกพาและ
อุปกรณ์ที่สวมใส่ได้ โดยทั่วไปแล้ว DataItem
จะมีองค์ประกอบดังนี้
- เพย์โหลด: ไบต์อาร์เรย์ที่คุณตั้งค่าด้วยข้อมูล ให้คุณกำหนดลำดับออบเจ็กต์ การดีซีเรียลไลซ์ ขนาดของเพย์โหลดต้องไม่เกิน 100 KB
-
เส้นทาง: สตริงที่ไม่ซ้ำกันซึ่งต้องเริ่มต้นด้วยเครื่องหมายทับ เช่น
"/path/to/data"
หมายเหตุ
API ชั้นข้อมูลจะส่งข้อความและซิงค์ข้อมูลกับโทรศัพท์ Android หรือ Wear OS ได้เท่านั้น
นาฬิกา หากอุปกรณ์ Wear OS ของคุณจับคู่กับอุปกรณ์ iOS API ชั้นข้อมูลจะไม่
ด้วยเหตุนี้ จึงไม่ใช้ Data Layer API เป็น
วิธีหลักในการสื่อสารกับเครือข่าย ให้ทำตาม
รูปแบบเดียวกับแอปบนอุปกรณ์เคลื่อนที่ โดยมีความแตกต่างเล็กน้อย
ปกติแล้วคุณไม่ได้ใช้ DataItem
โดยตรง แต่ให้ทำสิ่งต่อไปนี้แทน
-
สร้าง
PutDataRequest
ซึ่งระบุเส้นทางสตริงเพื่อระบุโดยไม่ซ้ำกัน ให้รายการนั้น -
โทร
setData()
เพื่อตั้งค่าเพย์โหลด -
หากความล่าช้าในการซิงค์จะส่งผลเสียต่อประสบการณ์ของผู้ใช้ โปรดโทร
setUrgent()
-
ใช้เมธอด
putDataItem
ของเมธอดDataClient
เพื่อขอให้ระบบสร้างรายการข้อมูล
เมื่อขอรายการข้อมูล ระบบจะแสดงออบเจ็กต์ที่ใช้ฟิลด์
อินเทอร์เฟซของ DataItem
อย่างไรก็ตาม แทนที่จะทำงานกับไบต์ดิบโดยใช้
setData()
เราขอแนะนำให้คุณ
ใช้แผนที่ข้อมูล
ซึ่งจะแสดงรายการข้อมูลที่มีอินเทอร์เฟซที่คล้ายกับ Bundle
สำหรับข้อมูลเพิ่มเติม โปรดดู แอปตัวอย่างชั้นข้อมูล
ซิงค์ข้อมูลกับแผนที่ข้อมูล
หากเป็นไปได้ ให้ใช้
DataMap
วิธีนี้ให้คุณดำเนินการกับรายการข้อมูลในรูปแบบ Bundle
ของ Android
เพื่อให้ระบบทำการจัดเรียงออบเจ็กต์และดีซีเรียลไลซ์ให้คุณ และคุณสามารถจัดการข้อมูล
ด้วยคู่คีย์-ค่า
วิธีใช้การแมปข้อมูล
-
สร้าง
PutDataMapRequest
กำลังกำหนดเส้นทางของรายการข้อมูลหมายเหตุ: สตริงเส้นทางคือตัวระบุที่ไม่ซ้ำสำหรับ รายการข้อมูลที่ให้คุณเข้าถึงได้จากการเชื่อมต่อทั้ง 2 ฝั่ง เส้นทาง ต้องขึ้นต้นด้วยเครื่องหมายทับ หากคุณใช้ข้อมูลตามลำดับชั้นใน ให้สร้างรูปแบบเส้นทางที่ตรงกับโครงสร้างของข้อมูล
-
โทร
PutDataMapRequest.getDataMap()
เพื่อดูการแมปข้อมูลที่คุณสามารถ ตั้งค่า -
ตั้งค่าสำหรับการแมปข้อมูลโดยใช้เมธอด
put...()
เช่นputString()
-
หากความล่าช้าในการซิงค์จะส่งผลเสียต่อประสบการณ์ของผู้ใช้ โปรดโทร
setUrgent()
-
โทร
PutDataMapRequest.asPutDataRequest()
เพื่อรับPutDataRequest
-
ใช้เมธอด
putDataItem
ของเมธอดDataClient
เพื่อขอให้ระบบสร้างรายการข้อมูลหมายเหตุ หากโทรศัพท์มือถือและอุปกรณ์ที่สวมใส่ได้ถูกตัดการเชื่อมต่อ ระบบจะบัฟเฟอร์ข้อมูลและซิงค์เมื่อมีการเชื่อมต่ออีกครั้ง
เมธอด increaseCounter()
ในตัวอย่างต่อไปนี้จะแสดงวิธีสร้าง
ข้อมูลและใส่ข้อมูลลงในนั้น:
Kotlin
private const val COUNT_KEY = "com.example.key.count" class MainActivity : Activity() { private lateinit var dataClient: DataClient private var count = 0 ... // Create a data map and put data in it private fun increaseCounter() { val putDataReq: PutDataRequest = PutDataMapRequest.create("/count").run { dataMap.putInt(COUNT_KEY, count++) asPutDataRequest() } val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq) } ... }
Java
public class MainActivity extends Activity { private static final String COUNT_KEY = "com.example.key.count"; private DataClient dataClient; private int count = 0; ... // Create a data map and put data in it private void increaseCounter() { PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/count"); putDataMapReq.getDataMap().putInt(COUNT_KEY, count++); PutDataRequest putDataReq = putDataMapReq.asPutDataRequest(); Task<DataItem> putDataTask = dataClient.putDataItem(putDataReq); } ... }
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดการ
Tasks
โปรดดู
เอกสารอ้างอิง
ตั้งค่าลำดับความสำคัญของ DataItem
DataClient
API อนุญาตคำขอเร่งด่วนสำหรับการซิงค์
DataItem
ออบเจ็กต์
โดยปกติแล้ว ระบบจะหน่วงเวลาการนำส่งรายการข้อมูล
ไปยังเครือข่าย Wear OS เพื่อเพิ่มอายุการใช้งานแบตเตอรี่ให้กับอุปกรณ์ของผู้ใช้
หากความล่าช้าในการซิงค์รายการข้อมูลจะส่งผลเสียต่อประสบการณ์ของผู้ใช้ คุณสามารถทำเครื่องหมาย
เป็นเรื่องเร่งด่วน เช่น ในแอปรีโมตคอนโทรล ที่ผู้ใช้คาดหวังว่า
ดำเนินการให้มีผลทันที คุณสามารถให้ระบบซิงค์รายการข้อมูลของคุณ
ทันทีด้วยการโทร
setUrgent()
หากคุณไม่โทรหา setUrgent()
ระบบอาจล่าช้าถึง 30 นาทีก่อน
การซิงค์รายการข้อมูลที่ไม่เร่งด่วน แม้ว่าโดยปกติคุณจะล่าช้าได้แค่ไม่กี่รายการ
นาที ความเร่งด่วนเริ่มต้นคือไม่เร่งด่วน คุณจึงต้องใช้
setUrgent()
หากคุณต้องการคงลักษณะการทำงานของการซิงค์จาก
Wear OS API เวอร์ชันก่อนหน้า
ฟังเหตุการณ์รายการข้อมูล
หากด้านใดด้านหนึ่งของการเชื่อมต่อชั้นข้อมูลเปลี่ยนแปลงรายการข้อมูล ให้แจ้ง ผู้ใช้เห็นการเปลี่ยนแปลงที่อีกด้านหนึ่งของการเชื่อมต่อ ซึ่งทำได้โดยใช้ Listener สำหรับเหตุการณ์ของรายการข้อมูล
ข้อมูลโค้ดในตัวอย่างต่อไปนี้จะแจ้งแอปเมื่อค่าของ ตัวนับที่กำหนดไว้ในการเปลี่ยนแปลงตัวอย่างก่อนหน้านี้
Kotlin
private const val COUNT_KEY = "com.example.key.count" class MainActivity : Activity(), DataClient.OnDataChangedListener { private var count = 0 override fun onResume() { super.onResume() Wearable.getDataClient(this).addListener(this) } override fun onPause() { super.onPause() Wearable.getDataClient(this).removeListener(this) } override fun onDataChanged(dataEvents: DataEventBuffer) { dataEvents.forEach { event -> // DataItem changed if (event.type == DataEvent.TYPE_CHANGED) { event.dataItem.also { item -> if (item.uri.path.compareTo("/count") == 0) { DataMapItem.fromDataItem(item).dataMap.apply { updateCount(getInt(COUNT_KEY)) } } } } else if (event.type == DataEvent.TYPE_DELETED) { // DataItem deleted } } } // Method to update the count private fun updateCount(int: Int) { ... } ... }
Java
public class MainActivity extends Activity implements DataClient.OnDataChangedListener { private static final String COUNT_KEY = "com.example.key.count"; private int count = 0; @Override protected void onResume() { super.onResume(); Wearable.getDataClient(this).addListener(this); } @Override protected void onPause() { super.onPause(); Wearable.getDataClient(this).removeListener(this); } @Override public void onDataChanged(DataEventBuffer dataEvents) { for (DataEvent event : dataEvents) { if (event.getType() == DataEvent.TYPE_CHANGED) { // DataItem changed DataItem item = event.getDataItem(); if (item.getUri().getPath().compareTo("/count") == 0) { DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap(); updateCount(dataMap.getInt(COUNT_KEY)); } } else if (event.getType() == DataEvent.TYPE_DELETED) { // DataItem deleted } } } // Method to update the count private void updateCount(int c) { ... } ... }
กิจกรรมนี้ใช้
DataClient.OnDataChangedListener
กิจกรรมจะเพิ่มตัวเอง
เป็น Listener สำหรับเหตุการณ์รายการข้อมูลภายใน
เมธอด onResume()
และนำ Listener ใน
onPause()
วิธี หากต้องการดูการติดตั้งใช้งานโดยใช้รูปภาพ ดูโมเดล และ
โปรดดูตัวอย่างชั้นข้อมูล
แอป
นอกจากนี้คุณยังใช้ Listener เป็นบริการได้ด้วย สำหรับข้อมูลเพิ่มเติม โปรดดู ฟังชั้นข้อมูล กิจกรรม