Как узнать текущее значение таймера в приложении Android WearOS Stock Timer? - PullRequest
0 голосов
/ 27 октября 2019

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

Пока я просто хочу понять, как получитьтекущее значение активного таймера, работающего в приложении «Таймер», поэтому оставшаяся длительность снижается на циферблате (как это делает сложность с таймером).

Я нашел способ достичь этого, но могу »Я не могу заставить его работать. Я вырезал следующий код, чтобы показать только соответствующие строки:

        @Override
        public void onCreate(SurfaceHolder holder) {
            super.onCreate(holder);

            setDefaultComplicationProvider(RIGHT_COMPLICATION_ID,
                new ComponentName("com.google.android.deskclock",
                    "com.google.android.deskclock.complications.TimerProviderService"),
                ComplicationData.TYPE_SHORT_TEXT);
            setActiveComplications(RIGHT_COMPLICATION_ID);

            initialiseComplications();
        }

        @Override
        public void onComplicationDataUpdate(
                int complicationId, ComplicationData complicationData) {

            mActiveComplicationDataSparseArray.put(complicationId, complicationData);

            ComplicationDrawable complicationDrawable =
                mComplicationDrawableSparseArray.get(complicationId);
            complicationDrawable.setComplicationData(complicationData);

            if (complicationId == RIGHT_COMPLICATION_ID) {
                if(complicationData.getShortText() != null) {
                    mTimerValue = complicationData.getShortText().getText(getBaseContext(),
                        System.currentTimeMillis());
                }
                else{
                    // TEST
                    mTimerValue = "99";
                }
            }

            invalidate();
        }
        @Override
        public void onDraw(Canvas canvas, Rect bounds) {
            canvas.drawText(String.valueOf(mTimerValue), mCenterX, 90, mTimePaint);
        }

Приведенный выше код отображает значение таймера на циферблате, но только когда таймер установлен / отменен ине обновляет отсчет секунд. Это также требует, чтобы мое правильное усложнение было установлено как усложнение Таймера (я полагаю, что я могу установить это как провайдер по умолчанию для скрытого усложнения, но это все еще кажется немного грязным).

Мне удалось получитьуровень заряда батареи при регистрации приемника, и было бы замечательно, если бы я мог сделать что-то подобное для приложения Timer, но я не знаю, что искать, чтобы получить информацию о Timer:

        @Override
        public void onCreate(SurfaceHolder holder) {
            super.onCreate(holder);

            context.registerReceiver(new BroadcastReceiver() {
                @Override
                public void onReceive(Context batteryContext, Intent batteryIntent) {
                    mBatteryLevel =  (int) (100 * batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
                            / ((float) (batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1))));
                    mCharging = (batteryIntent.getIntExtra(BatteryManager.EXTRA_STATUS, -1) == 2);
                }
            }, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        }

Все ещедовольно плохо для этого, так что извините, если вышеупомянутое невероятно небрежно!

...