当用户退出某个区域时,我会显示警告:
/*Function to show alert when Geofence breached*/
private void showAlert() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Geofence Breached");
builder.setMessage("User has breached the Geofence Boundary!");
builder.setPositiveButton(android.R.string.ok, null);
builder.show();
}
我这样称呼它:
if( distance[0] > mCircle.getRadius() ){
showAlert();
}
是否有任何方法可以将警报设置为每2分钟一次,因为始终会检查位置,然后通知会一直显示。我读过,Timers,Timertasks和alarmManagers,但我不认为它对我有用。任何帮助将不胜感激。
答案 0 :(得分:1)
在您的活动/服务中有一个成员变量来记录上次显示该对话框的时间:
long timeDialogShown = 0;
检查是否显示对话框时,将现在的时间与上次显示对话框的时间进行比较。如果超过2分钟,或者之前从未显示过,请显示对话框并更新时间戳。否则就什么都不做。
if( distance[0] > mCircle.getRadius() )
{
long timeNow = System.currentTimeMillis()/1000; //Timestamp in seconds
if ( (timeNow - timeDialogShown) > 120 || timeDialogShown == 0) //Show if 2 minutes have passed
{
timeDialogShown = System.currentTimeMillis()/1000; //Timestamp in seconds
showAlert();
}
}
答案 1 :(得分:0)
在这里,先生。
final AlertDialog dialog = ....
new Handler().postDelayed(new Runnable()
{
public void run()
{
dialog.dismiss();
}
}, 1000 * 60 * 2);
它会在2分钟(1000毫秒* 60秒* 2分钟)后关闭对话框
答案 2 :(得分:0)
见到这一点 - https://stackoverflow.com/a/6203816/881771 你需要在对话框上设置一个dismiss监听器,它会阻止你的showDialog()方法2分钟。
维护一个布尔值,表明自上次警报显示/解除后是否已经过了两分钟。
boolean twoMinsElapsed = true;
在显示alertDialog的代码中,检查此布尔值
if (distance[0] > mCircle.getRadius() && twoMinsElapsed) {
//block the showDialog() method until this value is set to true again
twoMinsElapsed=false;
showDialog();
}
为alertdialog设置dismisslistener
alertDialog.setOnDismissListener(new OnDismissListener(){
@Override
public void onDismiss(DialogInterface dialog) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//Set this boolean value back to true. will be called after two mins
twoMinsElapsed= true;
}
}, 120000);
}
});
将此视为伪代码:)