Android Wear Watchface с данными датчиков

Извиняюсь за отсутствие примеров кода, но все, что я пробовал до сих пор, было полным беспорядком.

Я пытался найти информацию в Интернете, возможно, я не ищу правильные термины.

Я могу создать циферблат, используя образцы в Android Studio, и я создал приложение, которое извлекает данные с датчиков. Чего я не могу сделать, так это совместить два.

Что я пытаюсь сделать, так это создать циферблат Android Wear, который может отображать различные фрагменты данных, собранных с датчиков на борту часов.

Например, акселерометр всегда включен, чтобы можно было использовать жесты запястья.

Может ли кто-нибудь указать мне правильное направление, как решить эту проблему, не публикуя ссылку на Android API, поскольку я исчерпал это.

С уважением,

Эммет


person mangledBadger    schedule 01.11.2015    source источник
comment
Если вы планируете постоянно собирать данные с датчиков, я бы сказал, что это не в интересах пользователей, поскольку это быстро убивает батарею. Хороший циферблат переходит в режим окружающей среды, и в этом состоянии процессор находится в почти спящем состоянии, чтобы сохранить батарею. В этом состоянии обычно отображается очень простая информация для пользователя, которая обычно представляет собой часы и минуты (даже не секунды) и, возможно, некоторые более статичные/менее изменяющиеся данные. Когда это состояние выходит, вы получаете обратный вызов, и вы можете выполнять некоторые необычные действия, такие как считывание значений датчиков.   -  person Ali Naddaf    schedule 02.11.2015
comment
Хорошо спасибо. Первоначально я просто хочу посмотреть, могу ли я получить доступ к данным с циферблата, цель состоит в том, чтобы не отображать данные, а прослушивать определенные события, которые могут генерироваться изменениями в датчиках. Я пытался найти учебные пособия и примеры кода, чтобы в основном отображать шаги или сердцебиение на циферблате, но безрезультатно.   -  person mangledBadger    schedule 02.11.2015
comment
Возможно, вы захотите описать, с какой проблемой вы сталкиваетесь, когда пытаетесь получить доступ к данным датчика с циферблата, чтобы получить прямую помощь там.   -  person Ali Naddaf    schedule 02.11.2015
comment
Проблемы: я пытаюсь получить показания акселерометра и отображать их на циферблате при изменении показаний, т.е. обнаруживать движение, как показания X, Y, Z. Я предполагаю, что акселерометр всегда активен, поскольку обнаружение жестов позволяет часам выходить из режима окружающей среды.   -  person mangledBadger    schedule 02.11.2015
comment
Вы продолжаете говорить о том, что хотите сделать, но не говорите, где это не получается, когда вы пытаетесь это сделать; мы спрашиваем, с какими проблемами вы сталкиваетесь, а не то, что вы пытаетесь сделать; вам нужно показать свой код и журналы, связанные с этим   -  person Ali Naddaf    schedule 02.11.2015
comment
Это терпит неудачу, потому что логически я не знаю шагов, необходимых для этого. Я не ищу решения, я ищу помощи у кого-то, кто, возможно, делал это раньше или знает, как это сделать, или у кого-то, кто может логически рассказать мне о шагах, необходимых для реализации этого. В настоящее время у меня нет кода, потому что он запутан и повсюду из-за разных подходов.   -  person mangledBadger    schedule 03.11.2015


Ответы (1)


Итак, после 3 дней игр и разочаровывающих ошибок мне удалось решить эту проблему, если кому-то еще нужно это понять:

Сначала реализуйте SensorEventListener:

private class Engine extends CanvasWatchFaceService.Engine implements SensorEventListener

Затем в onVisibilityChanged я зарегистрировал два созданных мной метода:

 @Override
    public void onVisibilityChanged(boolean visible) {
        super.onVisibilityChanged(visible);

        if (visible) {
            registerReceiver();
            registerAccelerometer();

            mTime.clear(TimeZone.getDefault().getID());
            mTime.setToNow();
        } else {
            unregisterReceiver();
            unregisterAccelerometer();
        }
        updateTimer();
    }

И два метода:

private void registerAccelerometer() {
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);
    }
private void unregisterAccelerometer() {
        sensorManager.unregisterListener(this);
    }

Затем в onSensorChanged, где я слушаю изменения акселерометра:

@Override
    public void onSensorChanged(SensorEvent sensorEvent) {

        ......
        // Calculate here
        }
        sensorX  = (int)linear_acceleration[0];
        sensorY  = (int)linear_acceleration[1];
        sensorZ  = (int)linear_acceleration[2];
    }

Присвоение их трем переменным перед вызовом метода onDraw():

@Override
    public void onDraw(Canvas canvas, Rect bounds) {
        // Get the current Time
        mTime.setToNow();

        // Set the current accelerometer readings.
        accelerometerX.setText("X : " + String.valueOf(sensorX));
        accelerometerY.setText("Y : " + String.valueOf(sensorY));
        accelerometerZ.setText("Z : " + String.valueOf(sensorZ));
        accelerometerRateOfChange.setText("T: " + String.valueOf(totalDisplacement));
    }

Теоретически это должно быть одинаковым для всех датчиков, а не только для акселерометра.

Стоит отметить, что я создал это с помощью примеров приложений Android Studio.

person mangledBadger    schedule 03.11.2015