如何通过DataItem

时间:2019-04-10 11:58:51

标签: android kotlin wear-os android-wear-data-api

我无法将表面与手持式应用程序连接。我想发送一个简单的文本(在掌上电脑中单击按钮)以了解其工作原理。不幸的是,我丢失了一些东西,因为表面上没有任何消息。

我的手持式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。

1 个答案:

答案 0 :(得分:0)

我花了一些时间,但是最后,我开始工作了。在我的表面类中,我有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方法中。 我正在通过按下按钮的手持设备活动发送数据项。

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

它并不完美,但至少可以正常工作,我可以继续。如果不清楚,请随时发表评论。