我正在尝试使用DataClient将数据从电话发送到手表。
我注意的事项:
- 相同包名
- 两个模块上都没有构建风格
- 磨损模块清单的附加服务
- 相同路径前缀
- 相同签名配置
我试过this sample project并将部分复制到我的项目中。我找不到任何问题。
示例项目在我的硬件上运行良好,有趣的是,它在模拟器中无法运行。因此,我也仅在硬件上测试了我的应用程序。(泛指el 6 Pro &泛指el Watch)
发送数据部分似乎正在工作,因为它的行为方式与示例项目相同。
如何从手机发送数据:
class WearDataManager(val context: Context) {
private val dataClient by lazy { Wearable.getDataClient(context) }
companion object {
private const val CLIENTS_PATH = "/clients"
private const val CLIENT_LIST_KEY = "clientlist"
}
fun sendClientList(clientList: MutableList<String>) {
GlobalScope.launch {
try {
val request = PutDataMapRequest.create(CLIENTS_PATH).apply {
dataMap.putStringArray(CLIENT_LIST_KEY, arrayOf("clientList, test"))
}
.asPutDataRequest()
.setUrgent()
val result = dataClient.putDataItem(request).await()
Log.d("TAG", "DataItem saved: $result")
} catch (cancellationException: CancellationException) {
throw cancellationException
} catch (exception: Exception) {
Log.d("TAG", "Saving DataItem failed: $exception")
}
}
}
}
这是我在手表上接收数据的方式:
class WearableListenerService: WearableListenerService() {
companion object {
const val CLIENTS_PATH = "/clients"
}
override fun onCreate() {
super.onCreate()
Log.d("testing", "STARTED SERVICE")
}
override fun onDataChanged(dataEvents: DataEventBuffer) {
super.onDataChanged(dataEvents)
Log.d("testing", "RECEIVED $dataEvents")
}
}
令人惊讶的是,当我在手表上启动应用程序时,日志中没有出现“STARTED SERVICE”。据我所知,这意味着系统不知道侦听器的存在,也没有注册它。因此,下面的清单一定有问题。
这是手表清单中的服务:
<service android:name=".wear.communication.WearableListenerService"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
<data
android:host="*"
android:pathPrefix="/clients"
android:scheme="wear" />
</intent-filter>
</service>
我错过了什么?
1条答案
按热度按时间jjjwad0x1#
结果发现发送部分是罪魁祸首。小心你使用的作用域,或者你是否想使用一个作用域。这个函数在我的代码中的一个工作者内部被调用,所以这不是一个问题。
我完全修改了上面的演示项目,并在此的帮助下,我发现了为什么它不工作。
以下是工作解决方案: