如何通过蓝牙配对从手机配套应用安装Wear OS表盘?
Wear OS表盘通过蓝牙从手机配套应用安装的实现方案
原则上完全可以通过蓝牙配对完成手表表盘的安装,蓝牙是手机与Wear OS设备默认的核心配对通信通道,官方及第三方跨设备安装逻辑大多基于此实现。以下是具体的方向指引和问题排查建议:
优先使用Wear OS官方跨设备安装API
不要手动传输APK,Wear OS提供了基于PackageInstaller的标准化跨设备安装机制,结合蓝牙通道即可实现:- 通过
NodeClient获取已配对的手表节点(蓝牙配对节点的isNearby属性为true); - 创建远程安装Session,将表盘APK字节流写入该Session;
- 提交安装请求,手表端会自动处理安装流程。
核心代码示例(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权限。- 通过
确保配套应用与表盘的关联配置正确
- 手机应用Manifest中添加关联声明:
<application> <meta-data android:name="com.google.android.wearable.beta.app" android:resource="@xml/wearable_app_desc"/> </application>- 在
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
相关产品推荐
相关产品推荐

