You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从Wear向手机应用发消息,求Wear到PhoneApp数据传输方案

解决Wear设备向手机应用发送消息失败的问题

看起来你在实现Wear到手机的消息传输时遇到了障碍,结合你提供的AndroidManifest片段,我帮你梳理下核心问题和修复步骤:

1. 先确认基础配对前提

Wear和手机应用能通信的核心前提是:

  • 两个模块(Wear/Phone)的applicationId完全一致(在各自模块的build.gradle中配置)
  • 两个应用使用相同的签名密钥签名(debug/release版本都要遵循)
  • 手机和Wear设备已通过蓝牙正常配对,且Google Play服务在两台设备上都正常运行

2. 修正手机端AndroidManifest配置

你当前的清单里有几个影响通信的问题:

(1)Leanback特性限制

你设置了<uses-feature android:name="android.software.leanback" android:required="true" />,这会让应用只能在TV设备上安装。如果你的手机应用不是专门的TV应用,建议改成:

<uses-feature android:name="android.software.leanback" android:required="false" />

否则普通手机无法安装该应用,Wear也无法配对到它。

(2)添加Wear通信权限

在<manifest>标签内添加必要权限:

<!-- 接收Wear消息的核心权限 -->
<uses-permission android:name="com.google.android.wearable.permission.RECEIVE_WEARABLE_MESSAGES" />
<!-- Android 12+ 蓝牙连接权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:maxSdkVersion="33" />
<!-- 旧版本蓝牙权限(可选,针对Android 11及以下) -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />

(3)注册消息监听服务

必须在<application>标签内注册WearableListenerService,用来接收Wear发来的消息:

<service
    android:name=".MyWearMessageListenerService"
    android:exported="true">
    <intent-filter>
        <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
        <!-- pathPrefix要和Wear端发送的消息路径匹配 -->
        <data
            android:host="*"
            android:pathPrefix="/wear_to_phone_data"
            android:scheme="wear" />
    </intent-filter>
</service>

3. 实现消息监听服务

创建MyWearMessageListenerService类,处理收到的消息:

import com.google.android.gms.wearable.MessageEvent
import com.google.android.gms.wearable.WearableListenerService
import android.util.Log

class MyWearMessageListenerService : WearableListenerService() {
    override fun onMessageReceived(messageEvent: MessageEvent) {
        super.onMessageReceived(messageEvent)
        // 根据消息路径区分不同类型的消息
        when (messageEvent.path) {
            "/wear_to_phone_data" -> {
                val receivedMessage = String(messageEvent.data)
                Log.d("WearCommunication", "收到Wear消息: $receivedMessage")
                // 这里可以添加UI更新、数据存储等业务逻辑
            }
        }
    }
}

4. 确保Wear端发送代码正确

Wear端需要获取已连接的手机节点,再发送消息,示例代码:

import com.google.android.gms.wearable.Wearable
import android.content.Context
import android.util.Log

fun sendMessageToPhone(context: Context, message: String) {
    val nodeClient = Wearable.getNodeClient(context)
    nodeClient.connectedNodes.addOnSuccessListener { nodes ->
        // 遍历所有已连接的手机节点
        for (node in nodes) {
            val messageClient = Wearable.getMessageClient(context)
            messageClient.sendMessage(
                node.id,
                "/wear_to_phone_data", // 必须和手机端的pathPrefix一致
                message.toByteArray()
            ).addOnSuccessListener {
                Log.d("WearSender", "消息发送成功")
            }.addOnFailureListener { e ->
                Log.e("WearSender", "消息发送失败: ${e.message}")
            }
        }
    }
}

5. 依赖库检查

确保Wear和Phone模块的build.gradle都添加了Wearable依赖:

dependencies {
    implementation "com.google.android.gms:play-services-wearable:18.1.0"
}

最后排查步骤

  1. 重启手机和Wear设备,重新配对
  2. 确认两台设备的Google Play服务版本一致
  3. 检查Wear端是否获取了必要的蓝牙权限(Android 12+需要BLUETOOTH_CONNECT)

内容的提问来源于stack exchange,提问作者Evolutio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:41:54