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

如何通过蓝牙配对从手机配套应用安装Wear OS表盘?

Wear OS表盘通过蓝牙从手机配套应用安装的实现方案

原则上完全可以通过蓝牙配对完成手表表盘的安装,蓝牙是手机与Wear OS设备默认的核心配对通信通道,官方及第三方跨设备安装逻辑大多基于此实现。以下是具体的方向指引和问题排查建议:

  • 优先使用Wear OS官方跨设备安装API
    不要手动传输APK,Wear OS提供了基于PackageInstaller的标准化跨设备安装机制,结合蓝牙通道即可实现:

    1. 通过NodeClient获取已配对的手表节点(蓝牙配对节点的isNearby属性为true);
    2. 创建远程安装Session,将表盘APK字节流写入该Session;
    3. 提交安装请求,手表端会自动处理安装流程。
      核心代码示例(Kotlin):
    // 获取配对的手表节点
    val nodeClient = Wearable.getNodeClient(context)
    val connectedNodes = nodeClient.connectedNodes.await()
    val watchNode = connectedNodes.firstOrNull { it.isNearby } ?: return
    
    // 创建远程安装Session
    val packageInstaller = context.packageManager.packageInstaller
    val sessionParams = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
    val sessionId = packageInstaller.createSession(sessionParams)
    val session = packageInstaller.openSession(sessionId)
    
    // 写入APK文件到远程Session
    val apkInputStream = context.resources.openRawResource(R.raw.watch_face_apk)
    val sessionOutputStream = session.openWrite("watch_face_apk", 0, -1)
    apkInputStream.copyTo(sessionOutputStream)
    session.fsync(sessionOutputStream)
    apkInputStream.close()
    sessionOutputStream.close()
    
    // 提交安装请求
    val resultIntent = Intent(context, InstallResultReceiver::class.java)
    val pendingIntent = PendingIntent.getBroadcast(context, 0, resultIntent, PendingIntent.FLAG_IMMUTABLE)
    session.commit(pendingIntent.intentSender)
    

    需在Manifest中注册InstallResultReceiver接收安装结果,同时声明com.google.android.wearable.permission.RECEIVE_COMPANION_DATA权限。

  • 确保配套应用与表盘的关联配置正确

    1. 手机应用Manifest中添加关联声明:
    <application>
      <meta-data
          android:name="com.google.android.wearable.beta.app"
          android:resource="@xml/wearable_app_desc"/>
    </application>
    
    1. 在res/xml/wearable_app_desc.xml中配置表盘信息:
    <wearableApp xmlns:android="http://schemas.android.com/apk/res/android">
      <versionCode>1</versionCode>
      <versionName>1.0</versionName>
      <rawPathResId>R.raw.watch_face_apk</rawPathResId> <!-- 表盘APK放在raw目录 -->
    </wearableApp>
    

    此配置会让系统识别手机应用为表盘的配套端,自动开放跨设备安装的通信权限。

  • 排查RemoteActivityHelper失败的核心原因
    之前使用RemoteActivityHelper失败,大概率是未正确指定手表节点,或缺少com.google.android.wearable.permission.REMOTE_ACTIVITY权限。但相比直接启动手表端Activity,使用PackageInstaller的方案更稳定,无需依赖手表端的特定Activity。

  • 关键权限与签名要求

    • 手机与表盘应用必须使用同一签名文件打包,否则手表会拒绝安装;
    • 手机应用需申请BLUETOOTH、ACCESS_FINE_LOCATION(Android 10+,用于蓝牙配对)权限,并动态申请位置权限;
    • 手表端表盘应用需声明com.google.android.wearable.permission.WEARABLE_CONFIGURATION权限,且Manifest中正确配置表盘Service与MetaData。

内容的提问来源于stack exchange,提问作者Mr.Green

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:21