Android Studio - установите значение на Firebase с плиткой быстрых настроек на экране блокировки - PullRequest
2 голосов
/ 05 ноября 2019

В настоящее время я занимаюсь разработкой приложения, которое позволяет мне управлять несколькими вещами через базу данных Firebase Real Time. Например: я могу включать и выключать свет нажатием кнопки. Последней функцией, которую я добавил, была плитка быстрых настроек, поэтому включайте или выключайте указанную лампу. Для этого я использовал TileService в сочетании с Firebase, как показано ниже. Это работает нормально, пока экран не заблокирован на некоторое время. Если я затем щелкаю плитку, она включается или выключается, однако не обновляет базу данных Firebase. Я полагаю, что телефон переходит в спящий режим и удерживает Tile от подключения к интернету? Чтобы уточнить: единственное, что не работает, это обновление значения базы данных / обновление значка, когда я вручную изменяю значение базы данных в Интернете. Вот как ссылка на базу данных:

    FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
final DatabaseReference tripodstatus=myRef.child("tripod").child("status");

Это код onStartListening:

    @Override
public void onStartListening(){
    tripodstatus.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.
            String value = dataSnapshot.getValue(String.class);
            int val = Integer.parseInt(value);
            if(val == 0){
                readstate=false;
            }
            else{
                readstate=true;
            }
            refresh(readstate);
            Log.d("file", "Value is: " + val + readstate);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Context context = getApplicationContext();
            CharSequence text = (CharSequence)databaseError;
            int duration = Toast.LENGTH_SHORT;

            Toast toast = Toast.makeText(context, text, duration);
            toast.show();

        }
    });

И это то, что он делает, когда я щелкаю по нему (отключение это в основном то же самое)

        getQsTile().setState(STATE_ACTIVE);
        Icon icon = Icon.createWithResource(getApplicationContext(),statusImages[1]);
        getQsTile().setIcon(icon);
        getQsTile().updateTile();
        tripodstatus.setValue("1");

Я думаю, что вызывается функция для ее включения (поскольку Tile переключается в активное состояние), но каким-то образом не удается обновить Firebase. Я был бы очень признателен за любую помощь, как это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...