我正在使用一个基于RSSI信标信号显示消息的Android应用程序。在后台扫描信标的类不是活动(但该类扩展了Application),因此我无法在该类中直接显示包含某些信息的对话框。那么如何在其他活动中捕获此类的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
}
}
}
}
});
}
答案 0 :(得分:0)
要显示对话框,您需要在前台具有“活动”。对于Android应用程序,情况并非总是如此,尤其是可能通过信标检测在后台启动的应用程序。如果尚未启动任何活动,则可以从Application类(可能,但通常被认为是不好的做法)启动活动,或者在这种情况下可以简单地取消对话框。
要从Application类触发对话框,您需要与前台的任何活动进行通信。有很多优雅的方法可以做到这一点(本地BroadcastRceivers和各种设计模式),但是最简单的方法是将对Activity的引用作为成员变量存储在Application类上,例如:
private MyActivity myActivity;
public setMyActivity(MyActivity a) {
myActivity = activity;
}
然后在MyActivity类上创建一个方法以显示对话框:
public void show dialog() {
...
}
最后,在您的检测代码中调用该方法:
if(beacon.getRssi() >= - 50) {
if (myActivity != null) {
myActivity.showDialog();
}
}
您可以在此站点上找到许多示例代码来实际进行对话框演示。
最后一个提示:注意防止您的对话框在以后每次信标检测时每秒重复出现!您将需要一些额外的逻辑