Как отправить строку через DataItem - PullRequest
0 голосов
/ 10 апреля 2019

Я не могу соединить мой циферблат с портативным приложением. Я хочу отправить простой текст (по нажатию кнопки на контроллере), чтобы понять, как это работает. К сожалению, я что-то упустил, потому что у меня нет сообщения на циферблате.

Мой onClickListener в портативном устройстве MainActivity

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 голосов
/ 12 апреля 2019

Я трачу некоторое время на это, но, наконец, у меня это работает.В моем классе циферблата у меня есть метод 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)
        }

Это не идеально, но по крайней мере это работает, и я могу идти вперед.Если что-то неясно, не стесняйтесь написать комментарий.

...