คุณส่งข้อความโดยใช้
MessageClient
API และแนบรายการต่อไปนี้ไปกับข้อความ
- เพย์โหลดที่กำหนดเองที่ไม่บังคับ
- เส้นทางที่ระบุการทำงานของข้อความที่ไม่ซ้ำกัน
ซึ่งต่างจากในกรณีของรายการข้อมูล จะไม่มีการซิงค์เกิดขึ้นระหว่าง แอปแบบพกพาและอุปกรณ์ที่สวมใส่ได้ ข้อความเป็นกลไกการสื่อสารทางเดียวซึ่งมีประโยชน์สำหรับการเรียกใช้โพรซีเยอร์ระยะไกล (RPC) เช่น การส่งข้อความไปยังอุปกรณ์ที่สวมใส่ได้เพื่อเริ่มกิจกรรม
อุปกรณ์ที่สวมใส่ได้หลายเครื่องสามารถเชื่อมต่อกับอุปกรณ์เคลื่อนที่ของผู้ใช้ได้ อุปกรณ์ที่เชื่อมต่อแต่ละเครื่องใน เครือข่ายนั้นจะถือว่าเป็นโหนด
หากมีอุปกรณ์เชื่อมต่อหลายเครื่อง คุณต้องพิจารณาว่าอุปกรณ์ใด โหนดจะได้รับข้อความ ตัวอย่างเช่น ในแอปการถอดเสียงเป็นคำที่รับข้อมูลเสียงใน อุปกรณ์ที่สวมใส่ได้ ส่งข้อความไปยังโหนดที่มีกำลังในการประมวลผลและแบตเตอรี่ ความสามารถในการจัดการคำขอ เช่น อุปกรณ์พกพา
หมายเหตุ เมื่อคุณระบุรายละเอียดของข้อความ ให้คำนึงถึงความเป็นไปได้ที่ ที่เชื่อมต่ออยู่ ตรวจสอบว่าส่งข้อความไปยังอุปกรณ์หรือโหนดที่ต้องการ
ดูตัวอย่างการใช้แอปต่อไปนี้ ชั้นข้อมูล
ส่งข้อความ
แอปสำหรับอุปกรณ์สวมใส่สามารถให้บริการฟังก์ชันการทำงานสำหรับผู้ใช้ เช่น เสียง การถอดเสียงเป็นคำ ผู้ใช้สามารถพูดใส่ไมโครโฟนของอุปกรณ์ที่สวมใส่ได้และถอดเสียงได้ บันทึกลงในโน้ตแล้ว เนื่องจากอุปกรณ์ที่สวมใส่ได้มักจะไม่มีกำลังในการประมวลผลและแบตเตอรี่ ขีดจำกัดที่ต้องใช้ในการจัดการกับกิจกรรมการถอดความเสียง แอปจำเป็นต้องนำงานนี้ออกไปยัง มีความสามารถมากขึ้น
ส่วนต่อไปนี้จะแสดงวิธีโฆษณาโหนดอุปกรณ์ที่สามารถประมวลผลกิจกรรมได้ ค้นหาโหนดที่สามารถตอบสนองความต้องการที่ขอ และส่งข้อความไปยัง
ความสามารถในการโฆษณา
หากต้องการเริ่มต้นกิจกรรมในอุปกรณ์พกพาจากอุปกรณ์ที่สวมใส่ได้ ให้ใช้
MessageClient
ชั้นเรียนเพื่อส่งคำขอ เนื่องจากมีอุปกรณ์ที่สวมใส่ได้หลายรายการ
สามารถเชื่อมต่อกับ
อุปกรณ์เคลื่อนที่ แอปอุปกรณ์ที่สวมใส่ได้จะต้องระบุว่าโหนดที่เชื่อมต่อ
สามารถเริ่มใช้กิจกรรมได้ ในแอปมือถือ ให้โฆษณาว่าโหนด
โมเดลจะทำงานเพื่อให้ความสามารถที่เฉพาะเจาะจง
หากต้องการโฆษณาความสามารถของแอปแบบพกพา ให้ทำดังนี้
- สร้างไฟล์การกำหนดค่า XML ในไดเรกทอรี
res/values/
ของโปรเจ็กต์และ ตั้งชื่อว่าwear.xml
- เพิ่มทรัพยากรชื่อ
android_wear_capabilities
ในwear.xml
- กำหนดความสามารถที่อุปกรณ์มีให้
หมายเหตุ ความสามารถคือสตริงที่กำหนดเองซึ่งคุณเป็นผู้กำหนดและต้องไม่ซ้ำกันภายในแอป
ตัวอย่างต่อไปนี้แสดงวิธีเพิ่มความสามารถชื่อ voice_transcription
ไปยัง
wear.xml
:
<resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@array/android_wear_capabilities"> <string-array name="android_wear_capabilities"> <item>voice_transcription</item> </string-array> </resources>
เรียกข้อมูลโหนดที่มีความสามารถที่จำเป็น
ในระยะแรก คุณสามารถตรวจหาโหนดที่มีความสามารถได้โดยเรียกใช้
เมธอด getCapability
ของ
ชั้นเรียน
CapabilityClient
หากต้องการใช้วิธีนี้ แอป Wear OS และแอปโทรศัพท์
ต้องมีรหัสแอปพลิเคชันเดียวกัน ตัวอย่างต่อไปนี้
แสดงวิธีเรียกข้อมูลผลลัพธ์ของโหนดที่เข้าถึงได้ด้วยตนเองด้วยฟังก์ชัน
ความสามารถ voice_transcription
รายการ:
Kotlin
private const val VOICE_TRANSCRIPTION_CAPABILITY_NAME = "voice_transcription" ... private fun setupVoiceTranscription() { val capabilityInfo: CapabilityInfo = Tasks.await( Wearable.getCapabilityClient(context) .getCapability( VOICE_TRANSCRIPTION_CAPABILITY_NAME, CapabilityClient.FILTER_REACHABLE ) ) // capabilityInfo has the reachable nodes with the transcription capability updateTranscriptionCapability(capabilityInfo) }
Java
private static final String VOICE_TRANSCRIPTION_CAPABILITY_NAME = "voice_transcription"; ... private void setupVoiceTranscription() { CapabilityInfo capabilityInfo = Tasks.await( Wearable.getCapabilityClient(context).getCapability( VOICE_TRANSCRIPTION_CAPABILITY_NAME, CapabilityClient.FILTER_REACHABLE)); // capabilityInfo has the reachable nodes with the transcription capability updateTranscriptionCapability(capabilityInfo); }
ในการตรวจหาโหนดที่รองรับขณะที่เชื่อมต่อกับอุปกรณ์ที่สวมใส่ได้ ให้ลงทะเบียน
ของผู้ฟัง โดยเฉพาะ OnCapabilityChangedListener
ของออบเจ็กต์ CapabilityClient
ตัวอย่างต่อไปนี้จะแสดงวิธีการ
ลงทะเบียน Listener และเรียกผลลัพธ์ด้วยโหนดที่เข้าถึงได้ซึ่งมีฟิลด์
ความสามารถ voice_transcription
รายการ:
Kotlin
private fun setupVoiceTranscription() { updateTranscriptionCapability(capabilityInfo).also { capabilityListener -> Wearable.getCapabilityClient(context).addListener( capabilityListener, VOICE_TRANSCRIPTION_CAPABILITY_NAME ) } }
Java
private void setupVoiceTranscription() { ... // This example uses a Java 8 Lambda. You can use named or anonymous classes. CapabilityClient.OnCapabilityChangedListener capabilityListener = capabilityInfo -> { updateTranscriptionCapability(capabilityInfo); }; Wearable.getCapabilityClient(context).addListener( capabilityListener, VOICE_TRANSCRIPTION_CAPABILITY_NAME); }
หลังจากตรวจพบโหนดที่รองรับแล้ว ให้ดูว่าจะส่งข้อความไปที่ใด เลือกโหนด
ที่อยู่ใกล้กับอุปกรณ์ที่สวมใส่ได้เพื่อลด
เส้นทางข้อความผ่านหลายโหนด โหนดใกล้เคียงคือโหนดที่เชื่อมต่อโดยตรง
กับอุปกรณ์ หากต้องการทราบว่าโหนดอยู่ใกล้เคียงหรือไม่ เช่น เชื่อมต่อผ่านบลูทูธ ให้เรียกใช้
Node.isNearby()
หากมีมากกว่า 1 โหนดอยู่ใกล้เคียง ให้เลือก 1 โหนดโดยไม่มีกฎเกณฑ์
ในทำนองเดียวกัน ถ้าไม่มีโหนดที่มีความสามารถอยู่ใกล้เคียง ให้เลือกโหนดที่มีความสามารถเอง
ตัวอย่างต่อไปนี้แสดงวิธีเลือกโหนดที่ดีที่สุดที่จะใช้
Kotlin
private var transcriptionNodeId: String? = null private fun updateTranscriptionCapability(capabilityInfo: CapabilityInfo) { transcriptionNodeId = pickBestNodeId(capabilityInfo.nodes) } private fun pickBestNodeId(nodes: Set<Node>): String? { // Find a nearby node or pick one arbitrarily. return nodes.firstOrNull { it.isNearby }?.id ?: nodes.firstOrNull()?.id }
Java
private String transcriptionNodeId = null; private void updateTranscriptionCapability(CapabilityInfo capabilityInfo) { Set<Node> connectedNodes = capabilityInfo.getNodes(); transcriptionNodeId = pickBestNodeId(connectedNodes); } private String pickBestNodeId(Set<Node> nodes) { String bestNodeId = null; // Find a nearby node or pick one arbitrarily. for (Node node : nodes) { if (node.isNearby()) { return node.getId(); } bestNodeId = node.getId(); } return bestNodeId; }
ส่งข้อความ
เมื่อคุณระบุโหนดที่จะใช้แล้ว ให้ส่งข้อความโดยใช้คลาส
MessageClient
ตัวอย่างต่อไปนี้แสดงวิธีส่งข้อความไปยังโหนดที่ถอดเสียงได้ จากอุปกรณ์ที่สวมใส่ได้ การเรียกนี้ทำงานพร้อมกันและบล็อกการประมวลผลจนกระทั่ง ระบบจะจัดคิวข้อความเพื่อนำส่ง
หมายเหตุ: รหัสผลลัพธ์ที่ประสบความสำเร็จไม่ได้รับประกันว่าจะมีการแสดงโฆษณา
ข้อความนั้น หากแอปต้องใช้ความน่าเชื่อถือของข้อมูล โปรดพิจารณาใช้
DataItem
หรือChannelClient
เพื่อส่งข้อมูลระหว่างอุปกรณ์
Kotlin
const val VOICE_TRANSCRIPTION_MESSAGE_PATH = "/voice_transcription" ... private fun requestTranscription(voiceData: ByteArray) { transcriptionNodeId?.also { nodeId -> val sendTask: Task<*> = Wearable.getMessageClient(context).sendMessage( nodeId, VOICE_TRANSCRIPTION_MESSAGE_PATH, voiceData ).apply { addOnSuccessListener { ... } addOnFailureListener { ... } } } }
Java
public static final String VOICE_TRANSCRIPTION_MESSAGE_PATH = "/voice_transcription"; private void requestTranscription(byte[] voiceData) { if (transcriptionNodeId != null) { Task<Integer> sendTask = Wearable.getMessageClient(context).sendMessage( transcriptionNodeId, VOICE_TRANSCRIPTION_MESSAGE_PATH, voiceData); // You can add success and/or failure listeners, // Or you can call Tasks.await() and catch ExecutionException sendTask.addOnSuccessListener(...); sendTask.addOnFailureListener(...); } else { // Unable to retrieve node with transcription capability } }
หมายเหตุ: หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเรียกไปยัง บริการ Google Play และกรณีที่ควรใช้แต่ละบริการ โปรดดูที่ Tasks API
นอกจากนี้คุณยังประกาศข้อความไปยังโหนดที่เชื่อมต่อทั้งหมดได้ด้วย หากต้องการดึงข้อมูล โหนดที่เชื่อมต่อที่คุณสามารถส่งข้อความไปให้ ติดตั้งโค้ดต่อไปนี้:
Kotlin
private fun getNodes(): Collection<String> { return Tasks.await(Wearable.getNodeClient(context).connectedNodes).map { it.id } }
Java
private Collection<String> getNodes() { HashSet <String>results = new HashSet<String>(); List<Node> nodes = Tasks.await(Wearable.getNodeClient(context).getConnectedNodes()); for (Node node : nodes.getNodes()) { results.add(node.getId()); } return results; }
รับข้อความ
หากต้องการรับการแจ้งเตือนเมื่อได้รับข้อความ ให้ใช้
MessageClient.OnMessageReceivedListener
เพื่อมอบ Listener สำหรับเหตุการณ์ข้อความ จากนั้นลงทะเบียน Listener
ด้วย addListener
ตัวอย่างต่อไปนี้แสดงวิธีใช้งาน Listener เพื่อตรวจสอบ
VOICE_TRANSCRIPTION_MESSAGE_PATH
หากเงื่อนไขนี้คือ
true
เริ่มกิจกรรมเพื่อประมวลผลข้อมูลเสียง
Kotlin
fun onMessageReceived(messageEvent: MessageEvent) { if (messageEvent.path == VOICE_TRANSCRIPTION_MESSAGE_PATH) { val startIntent = Intent(this, MainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) putExtra("VOICE_DATA", messageEvent.data) } startActivity(this, startIntent) } }
Java
@Override public void onMessageReceived(MessageEvent messageEvent) { if (messageEvent.getPath().equals(VOICE_TRANSCRIPTION_MESSAGE_PATH)) { Intent startIntent = new Intent(this, MainActivity.class); startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startIntent.putExtra("VOICE_DATA", messageEvent.getData()); startActivity(this, startIntent); } }
โค้ดนี้ต้องมีรายละเอียดการใช้งานเพิ่มเติม ดูข้อมูลเกี่ยวกับ วิธีใช้บริการหรือกิจกรรมสำหรับผู้ฟังโดยสมบูรณ์ใน ติดตามเหตุการณ์ชั้นข้อมูล