Есть ли способ сделать индикаторы на циферблатах в Android Wear видимыми?

Я создаю новый циферблат для одежды Android.

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

Есть ли способ узнать, когда эти индикаторы становятся видимыми?

Здесь я настроил watchFaceStyle:

setWatchFaceStyle(new WatchFaceStyle.Builder(DigitalWatchFaceService.this)
                        .setAcceptsTapEvents(false)
                        .setCardPeekMode(WatchFaceStyle.PEEK_MODE_SHORT)
                        .setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
                        .setHotwordIndicatorGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL)
                        .setPeekOpacityMode(WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT)
                        .setShowUnreadCountIndicator(false)
                        .setStatusBarGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL)
                        .setShowSystemUiTime(false)
                        .build());

Есть ли что-то вроде ..:

isStatusBarVisible()

or

isHotwordIndicatorVisible()

или есть какой-то метод в слушателе? не могу найти что-то подобное..


person erli2909    schedule 03.11.2015    source источник


Ответы (2)


Вам нужно будет проделать аналогичную работу, как эти индикаторы определяют, должны ли они отображаться. Например, вам нужно будет прослушивать события батареи и из этого сделать вывод, находится ли устройство на зарядном устройстве. Для соединения вам нужно прослушивать onPeerConnected на onPeerDisconnected.

Но в целом это не кажется хорошей идеей. У вас никогда нет гарантии, что что-то новое не будет добавлено. Вместо этого вы должны использовать API-интерфейс циферблата, чтобы расположить индикаторы там, где они лучше всего подходят для вашего циферблата, и вообще избегать этой области при отображении вашего контента.

person gruszczy    schedule 03.11.2015

Я знаю, что это не очень хорошая идея, но вот мое решение:

Проверьте соединение: (Проблема: это намного быстрее, чем индикатор)

Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
    @Override
    public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
        if (!getConnectedNodesResult.getNodes().isEmpty()) {
            isConnected = true;
        } else {
                isConnected = false;
        }
    }
});

Проверьте аккумулятор:

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = getBaseContext().registerReceiver(null, intentFilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
         status == BatteryManager.BATTERY_STATUS_FULL;

Индикаторы:

if (isCharging || !isConnected) {
    isIndicatorVisible = true;
} else {
    isIndicatorVisible = false;
}
person erli2909    schedule 19.11.2015