İletilerinizi
MessageClient
API'yi tıklayın ve iletiye şu öğeleri ekleyin:
- İsteğe bağlı rastgele yük
- Mesajın işlemini benzersiz şekilde tanımlayan bir yol
Veri öğelerinden farklı olarak, uygulamalar da var. Mesajlar, uzak prosedür çağrıları (RPC) için faydalı olan tek yönlü bir iletişim mekanizmasıdır. örneğin bir aktivite başlatmak için giyilebilir cihaza mesaj göndermek gibi.
Kullanıcıların avuç içi cihazlarına birden fazla giyilebilir cihaz bağlanabilir. Şu kampanyadaki bağlı her cihaz: Ağ, bir düğüm olarak kabul edilir.
Birden fazla bağlı cihaz varsa hangisinin mesajları almasını sağlar. Örneğin, mesajı, işlemci gücü ve pili olan bir düğüme gönderin. kapasitesine sahip olmalıdır (ör. bir avuç içi cihaz).
Not: Mesajınızın ayrıntılarını belirtirken birden fazla olasılık, bağlı düğümler bulunur. Mesajın hedeflenen cihazlara veya düğümlere teslim edildiğinden emin olun.
Kullanım örnekleri için aşağıdaki örnek uygulamaya bakın: Veri Katmanı
Mesaj gönder
Giyilebilir uygulamalar, kullanıcılara ses gibi işlevler sağlayabilir. transkript. Kullanıcılar giyilebilir cihazlarının mikrofonuna konuşarak bir transkript elde edebilirler bir nota kaydedilir. Giyilebilir cihazların genellikle işlem gücü ve pili olmadığı için, uygulamanın bu işi başka bir cihaza yüklemesi gerekir. daha yetenekli bağlı bir cihaz olabilir.
Aşağıdaki bölümlerde, etkinliği işleyebilen cihaz düğümlerinin nasıl tanıtılacağı gösterilmektedir istenen bir ihtiyacı karşılayabilecek düğümleri keşfetme ve bunlara mesajları gönderme düğüm.
Reklam özellikleri
Giyilebilir bir cihazdan avuç içi bir cihazda etkinlik başlatmak için
İsteği
MessageClient
sınıfa gönderebilir. Giyilebilir birden fazla cihaz,
şunlara bağlanabilir:
Giyilebilir uygulamasının, bağlı bir düğümün o anda etkin olmadığını
etkinliği başlatabilirsiniz. Avuç içi uygulamanızda,
ve üzerinde çalıştığı belgenin belirli özellikleri vardır.
Avuç içi uygulamanızın özelliklerini tanıtmak için aşağıdakileri yapın:
- Projenizin
res/values/
dizininde bir XML yapılandırma dosyası oluşturun vewear.xml
olarak adlandıralım. wear.xml
alanınaandroid_wear_capabilities
adlı bir kaynak ekleyin.- Cihazın sağladığı özellikleri tanımlayın.
Not: Özellikler, sizin tanımladığınız özel dizelerdir ve uygulamanızın içinde benzersiz olmalıdır.
Aşağıdaki örnekte, voice_transcription
adlı bir özelliğin nasıl ekleneceği gösterilmektedir
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>
Gerekli özelliklere sahip düğümleri alma
Başlangıçta, uygun düğümleri
getCapability
yöntemi
CapabilityClient
sınıf. Bu yöntemi kullanmak için Wear OS uygulamanız ve telefon uygulamanız
aynı uygulama kimliğine sahip olmalıdır. Aşağıdaki örnek
voice_transcription
özelliği:
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); }
Uygun düğümleri giyilebilir cihaza bağlanırken tespit etmek için bir
bir dinleyici örneği, özellikle de OnCapabilityChangedListener
(CapabilityClient
) bir nesnedir. Aşağıdaki örnekte,
işleyiciyi kaydedebilir ve
voice_transcription
özelliği:
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); }
Uygun düğümleri tespit ettikten sonra iletinin nereye gönderileceğini belirleyin. Düğüm seçin
giyilebilir cihazınızın yakınında olması gerekir.
birden çok düğüm üzerinden yönlendirme yapabilirsiniz. Yakındaki bir düğüm, doğrudan bağlı olan bir düğüm olarak tanımlanır
ekleyebilirsiniz. Bir düğümün yakında olup olmadığını (ör. Bluetooth aracılığıyla bağlı) belirlemek için
Node.isNearby()
yöntemini çağırın. Yakınlarda birden fazla düğüm varsa rastgele bir düğüm seçin.
Benzer şekilde, yakınlarda yetenekli düğüm yoksa rastgele bir yetenekli düğüm seçin.
Aşağıdaki örnekte, kullanılacak en iyi düğümü nasıl belirleyebileceğiniz gösterilmektedir:
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; }
Mesajı iletme
Kullanılacak bir düğüm belirledikten sonra
MessageClient
sınıfını kullanarak iletiyi gönderin.
Aşağıdaki örnekte, metne dönüştürme özellikli düğüme nasıl mesaj gönderileceği gösterilmektedir giyilebilir bir cihazdan düzenleyebilirsiniz. Bu çağrı eşzamanlıdır ve şu zamana kadar işlemeyi engeller: sistem iletiyi teslim edilmek üzere sıraya alır.
Not: Başarılı bir sonuç kodu,
mesajı alırsınız. Uygulamanız veri güvenilirliği gerektiriyorsa
DataItem
kullanabilirsiniz
nesneler veya ChannelClient
sınıfını kullanır.
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 } }
Not: Eşzamansız ve eşzamanlı çağrılar hakkında daha fazla bilgi edinmek için: Google Play hizmetleri ve her birinin ne zaman kullanılacağı ile ilgili daha fazla bilgiyi Tasks API'de bulabilirsiniz.
Ayrıca, tüm bağlı düğümlere mesaj yayınlayabilirsiniz. Tüm mesaj gönderebileceğiniz bağlı düğümler için aşağıdaki kodu uygulayın:
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; }
Mesaj alma
Alınan mesajlarla ilgili bildirim almak için
MessageClient.OnMessageReceivedListener
mesaj etkinlikleri için bir işleyici sağlar. Ardından dinleyiciyi kaydedin
addListener
ile
yöntemidir. Aşağıdaki örnekte, test etmek için işleyiciyi
VOICE_TRANSCRIPTION_MESSAGE_PATH
Bu koşul
true
, ses verilerini işlemek için bir etkinlik başlat.
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); } }
Bu kod için uygulama hakkında daha fazla ayrıntı gerekir. Daha fazla bilgi bir tam dinleyici hizmetinin veya etkinliğinin Veri katmanı etkinliklerini izleyin.