Я не могу подключить свой циферблат к мобильному приложению. Я хочу отправить простой текст (при нажатии кнопки на портативном компьютере), чтобы понять, как это работает. К сожалению, я что-то упускаю, потому что у меня нет сообщений на циферблате.
Мой 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.
Я бы просто сказал, что API данных имеет довольно много движущихся частей, которые нужно исправить, и по вашим фрагментам сложно сказать, что может быть неправильным. Одна очевидная вещь заключается в том, что если вы всегда отправляете одно и то же "TEST TEXT"
, вы никогда не получите onDataChanged
, потому что данные не изменение. Но у вас могут быть и другие проблемы. Хорошей тактикой может быть начать с образца API от Google и адаптировать его уже работающий код для вашего варианта использования.
О, я понимаю, что такое onDataChanged :D Но теперь у меня проблема с логикой моего приложения. У меня есть список опций в носимом устройстве. Является ли элемент данных хорошим способом переключения параметров с портативного устройства? Сегодня я трачу некоторое время на образец Google. Я думаю, что я не получаю часть данных отправки. Могу ли я отправлять данные в onClickListener? И еще, можно ли как-то проверить, успешно ли отправлен элемент данных (например, метод onDataRecived)?
Насколько я знаю, нет ничего лучше события onDataReceived; в этом мы полностью на милости WearOS. И, вероятно, лучше открыть новый вопрос, касающийся onClickListener
, с более подробной информацией о вашей настройке.
Спасибо, я думаю, что я действительно близок к решению. Но я не могу понять одну вещь. Можно ли как-то получить первые полученные данные? Потому что каждые следующие данные перехватываются onDataChanged, а первые теряются. Спасибо за терпение :D
Я не понимаю, о чем вы спрашиваете, извините. Никакие данные не должны быть «перехвачены» onDataChanged
; все изменения данных должны быть связаны API с этим методом.
Я трачу на это некоторое время, но, наконец, у меня это работает. В моем классе циферблата у меня есть метод 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)
}
Это не идеально, но, по крайней мере, это работает, и я могу двигаться дальше. Если что-то непонятно, смело пишите комментарий.
что-нибудь в logcat?