Чтобы представить диалог, вы должны иметь активность на переднем плане.Это не всегда так для приложения 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();
}
}
Вы можете найти множество примеров кода, который на самом деле можно сделатьдиалоговое представление на этом сайте.
Последний совет: старайтесь не допускать повторного представления вашего диалога каждую секунду при каждом последующем обнаружении маяка!Для этого вам понадобится дополнительная логика