如何通过 DataItem 发送字符串

How to send String via DataItem

我无法将我的表盘与手持应用程序连接。我想发送一个简单的文本(在手持设备的点击按钮上)以了解它是如何工作的。不幸的是,我错过了一些东西,因为我在表盘上没有任何消息。

我在掌机MainActivity中的onClickListener

sendDataItem.setOnClickListener {
            val putDataReq: PutDataRequest = PutDataMapRequest.create("/test").run {
                dataMap.putString("key", "TEST TEXT")
                asPutDataRequest()
            }
            val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq)
        }

我覆盖的 OnDataChanged 方法(我至少想做的)将数据发送到我的表盘

override fun onDataChanged(dataEvents: DataEventBuffer) {
            dataEvents.forEach { event ->
                // DataItem changed
                if (event.type == DataEvent.TYPE_CHANGED) {
                    event.dataItem.also { item ->
                        if (item.uri.path.compareTo("/test") == 0) {
                            DataMapItem.fromDataItem(item).dataMap.apply {
                                weatherTemp = getString("key")
                            }
                        }
                    }
                } else if (event.type == DataEvent.TYPE_DELETED) {
                    // DataItem deleted
                }
            }
        }

我想要一个简单的结果。一旦我收到数据,我想将其保存到 weatherTemp var.

我花了一些时间在这上面,但最后,我开始工作了。在我的表盘 class 中,我有正在接收数据项的 onDataChange 方法:

override fun onDataChanged(dataEvents: DataEventBuffer) {
            dataEvents.forEach { event ->
                if (event.type == DataEvent.TYPE_CHANGED) {
                    val path = event.dataItem.uri.path
                    event.dataItem.also { item ->
                        if (path.compareTo("/testPath") == 0) {
                            DataMapItem.fromDataItem(item).dataMap.apply {
                               //I'm changing var that is printed on the watchface screen
                                testVar = getInt("key").toString()
                            }
                        }
                    }
                } else if (event.type == DataEvent.TYPE_DELETED) {
                    //DataItem deleted
                } else {
                    //Unknown data type event
                }
            }
        }

你不能忘记:

 Wearable.getDataClient(applicationContext).addListener(this)

在您的 onCreate 方法中。 我在按下按钮时从手持设备 activity 发送数据项。

sendDataItem.setOnClickListener {
            putDataMapReq = PutDataMapRequest.create("/testPath")
            putDataMapReq.dataMap.putInt("key", testVar++)
            putDataReq = putDataMapReq.asPutDataRequest()
            putDataReq.setUrgent()
            putDataTask = Wearable.getDataClient(applicationContext).putDataItem(putDataReq)
        }

它并不完美,但至少它在工作,我可以继续了。如果有任何不清楚的地方,请随时写评论。