Показывать диалог в Android на основе сигнала RSSI от маяков - PullRequest
0 голосов
/ 23 февраля 2019

Я работаю над приложением Android, которое отображает сообщения на основе сигнала маяка RSSI.Класс, который сканирует маяки в фоновом режиме, не является действием (но класс расширяет приложение), поэтому я не могу отобразить диалоговое окно с некоторыми сведениями непосредственно в этом классе.Итак, как мне захватить сигнал RSSI из этого класса в какой-то другой деятельности и затем отобразить диалоговое окно?

Вот функция в классе, которая сканирует маяки:

@Override                                                              
public void onBeaconServiceConnect(){
    mBeaconManager.setRangeNotifier(new RangeNotifier() {

        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {                                                       
             if(beacons.size() > 0) {
                  for (Beacon beacon: beacons) {
                      if(beacon.getRssi() >= - 50) {

                         ... i want here show a dialog

                      }

                  }
              }
         }
    });
}

1 Ответ

0 голосов
/ 23 февраля 2019

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

Чтобы запустить диалоговое окно из класса ApplicationВы должны общаться с любой деятельностью на переднем плане.Есть много элегантных способов сделать это (локальные BroadcastRceivers и различные шаблоны проектирования), но самое простое - сохранить ссылку на вашу активность в классе Application в виде переменной-члена, например:

private MyActivity myActivity;

public  setMyActivity(MyActivity a) {
  myActivity = activity;
}

Затем создайтеметод в вашем классе MyActivity для представления диалогового окна:

public void show dialog() {
...
}

Наконец, вызовите этот метод в вашем коде обнаружения:

if(beacon.getRssi() >= - 50) {
      if (myActivity != null) {
         myActivity.showDialog();
      }
 }

Вы можете найти множество примеров кода, который на самом деле можно сделатьдиалоговое представление на этом сайте.

Последний совет: старайтесь не допускать повторного представления вашего диалога каждую секунду при каждом последующем обнаружении маяка!Для этого вам понадобится дополнительная логика

...