Невозможно отправить данные из приложения Wear OS в телефонное приложение (Kotlin) с DataClient (Google Services)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно отправить данные из приложения Wear OS в телефонное приложение (Kotlin) с DataClient (Google Services)

Сообщение Anonymous »

Я использую последнюю версию Android Studio. У меня есть Samsung Galaxy Watch 6 Classic и A Samsung S24 Ultra (оба полностью современные прошивки). < /P>
Я закодировал в приложении Kotlin A Wear OS для ледяных фигур. Он записывает несколько типов данных во время сеанса, такие как дата сеанса, продолжительность, средняя и максимальная скорость, расстояние катания на коньках, частота сердечных сокращений, калории сгорает и т. Д. < /p>
Я также кодировал, в том же Project, приложение Companion Phone (второй модуль), которое должно получать данные. В приложении для телефона я нажимаю на «Сессионную сессию бесплатного катания», и дата сеанса должна отображаться, нажимать на дату и отображать другие значения в ленивом столбце. < /P>
Проблема в том, что я не могу заставить данные отправлять в приложение для телефона. p>
Когда сеанс выполнен, данные «посылаются» (у меня есть класс данных SessionData на третьем модуле с названием Common, он совместно используется между приложением для часов и телефон), и я использую PutdatamapRequest для Отправьте их: < /p>

Код: Выделить всё

suspend fun sendSessionDataToDataLayer(sessionData: SessionData, context: Context) {
val bundle = Bundle().apply {
putParcelable("sessionData", sessionData)
}
val putDataMapRequest = PutDataMapRequest.create("/session-data").apply {
dataMap.putAll(DataMap.fromBundle(bundle))
}
val putDataRequest = putDataMapRequest.asPutDataRequest()

try {
Log.d("sendSessionDataToDataLayer", "Sending session data: $sessionData")
Wearable.getDataClient(context).putDataItem(putDataRequest).await()
Log.d("sendSessionDataToDataLayer", "Data sent successfully")

// Show a toast to the user on the watch
Toast.makeText(context, "Data queued for transfer", Toast.LENGTH_SHORT).show()

resetSession() // Only reset after successful data transfer
} catch (e: Exception) {
Log.e("sendSessionDataToDataLayer", "Failed to send session data", e)
// Optionally show an error toast
Toast.makeText(context, "Data send failed: ${e.message}", Toast.LENGTH_SHORT).show()
}
}
Путь-"/session-data" , то же самое в приложении для часов и телефона. «< /p>
Тогда у меня есть мой слушатель в телефоне с функцией ondatachanged. Предполагается, что он будет извлекать данные и депаркулизировать их. Но ondatached никогда не стреляет ...
class MyDataLayerListenerService : WearableListenerService() {
override fun onDataChanged(dataEvents: DataEventBuffer) {
// Indicate that onDataChanged was called at all
Toast.makeText(this, "onDataChanged triggered!", Toast.LENGTH_SHORT).show()

dataEvents.forEach { event ->
if (event.type == DataEvent.TYPE_CHANGED && event.dataItem.uri.path == "/session-data") {
try {
val dataMap = DataMapItem.fromDataItem(event.dataItem).dataMap
val bundle = dataMap.toBundle()
val sessionData: SessionData? = bundle.getParcelable("sessionData")

if (sessionData != null) {
Toast.makeText(this, "Received session data!", Toast.LENGTH_SHORT).show()
saveSessionDataLocally(sessionData)
} else {
Toast.makeText(this, "SessionData is null", Toast.LENGTH_SHORT).show()
}
} catch (e: Exception) {
Toast.makeText(this, "Failed to parse session data: ${e.message}", Toast.LENGTH_LONG).show()
}
}
}
}

private fun saveSessionDataLocally(sessionData: SessionData) {
// e.g. show a final toast
Toast.makeText(this, "Session data saved: ${sessionData.distanceSkated}", Toast.LENGTH_SHORT).show()
}
< /code>
} < /p>
Из этого я не получаю тостов. На экране телефона я должен увидеть строку с сессиями дат, чего не происходит. Данные не передаются. Когда сеанс будет выполнен, часы говорят, что «данные, представленные в очереди на передачу». Так что, похоже, часы думают, что работа правильно выполнена. Я также внедрил тосты по телефону, но они никогда не показывают. Просто пустая страница вместо даты сеанса катания. Тема, они рекомендовали, чтобы телефон и часы имели тот же идентификатор приложения. Точно так же я думал, что мне нужны идентификаторы узлов для отправки данных, но это только для Messageclient, а не DataClient. Вошли в ту же учетную запись Google (и та же самая учетная запись Samsung за то, что она стоит), на том же Wi -Fi. Я не оторвал часы и отремонтировал. Я полностью сбросил часы и отремонтировал их на телефон. Услуги Google на моих часах обновлены по состоянию на январь 2025 года (24.49.33-705592033), а по телефону службы Google Play полностью разрешены и имеют высокий приоритет. < /P>
В Манифест телефона, Google Services Wearable. У меня есть носимый.bind.listener и носимый.data.changed. Путь данных хорош, например "/Session-data".
Манифест телефона:












< /code>
Все модули (смотреть, телефон, общий для класса данных) распознаются и объявляются в файлах Gradle. < /p>
Я попытался разработать Простой проект, просто чтобы перенести простую строку из моих часов на телефон, но не смог бы заставить его работать.

Подробнее здесь: https://stackoverflow.com/questions/793 ... dataclient
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»