WearableListenerService перестает отвечать после того, как телефон бездействуетAndroid

Форум для тех, кто программирует под Android
Anonymous
WearableListenerService перестает отвечать после того, как телефон бездействует

Сообщение Anonymous »

У меня странная проблема. Я использую класс DataClient для передачи данных из телефонного приложения в приложение WearOS. В течение многих лет он работал нормально, а затем, после недавнего обновления до WearOS 6, onDataChanged в WearableListenerService перестает отвечать после того, как телефон некоторое время простаивал, например, ночью.
В качестве теста я добавил код MessageClient в приложение для телефона, и onMessageReceived в приложении для часов был активирован, а onDataChanged — нет. Не работает только DataClient.
Что еще более странно, если я принудительно закрою приложение телефона, в приложении часов будет выбран onDataChanged, как если бы запросы были поставлены в очередь на телефоне.
Перезагрузка телефона иногда помогает. Однако перезагрузка часов не помогает.
Это телефон Pixel 9a под управлением Android 16. Это часы Galaxy Watch 7 под управлением WearOS 6.
Приложение для телефона:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

PutDataMapRequest dataMapRequest = PutDataMapRequest.create("/watch");
DataMap dataMap = dataMapRequest.getDataMap();
dataMap.putString("key", "value");

Wearable.getDataClient(this).putDataItem(dataMapRequest.asPutDataRequest())
.addOnSuccessListener(dataItem -> {
//this is hit on the phone
})
}


Приложение для часов:
public class WearableService extends WearableListenerService {

@Override
public void onDataChanged(DataEventBuffer dataEvents) {

//never called on the watch
}
}


Этот код в приложении для телефона сработал:
Wearable.getNodeClient(this).getConnectedNodes().addOnSuccessListener(nodes -> {
for (Node node : nodes)
Wearable.getMessageClient(mContext).sendMessage(node.getId(), "/test", null);
});

Приложение для просмотра:
@Override
public void onMessageReceived(MessageEvent messageEvent) {
//this is hit
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... -been-idle

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