2014-02-24 53 views
1

我顯示當用戶離開某個區域的警告:警報對話框之間設置時間

/*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分鐘一次警報就會關閉,因爲所有時間都會檢查位置,然後通知不斷出現。我已閱讀,定時器,Timertasks和alarmManagers,但我不認爲它會爲我工作。任何幫助,將不勝感激。

+0

您想從打開它的3分鐘後取消對話框嗎? – Triode

+0

@RajeshCP不,我看到了解決方案,我的用戶可以點擊確定,並立即顯示另一個警報,我想設置一個警報只能顯示每隔2分鐘,如果可能的話。 –

回答

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(); 
    } 
} 
+0

謝謝,我正在尋找什麼。 –

0

這是,先生。

final AlertDialog dialog = .... 
new Handler().postDelayed(new Runnable() 
{ 
    public void run() 
    { 
    dialog.dismiss(); 
    } 
}, 1000 * 60 * 2); 

它將解僱後2分鐘的對話(1000毫秒* 60秒* 2分鐘)

+0

謝謝,請參閱我的評論,我不想解僱我期待在展示它之間設置延遲的對話框。 –

0

請參閱本 - https://stackoverflow.com/a/6203816/881771 你需要安裝一個解僱監聽你的對話框,其中塊對你的ShowDialog( )方法2分鐘。

  1. 保持一個布爾值,表明自上次警報顯示/解除後,如果兩分鐘過去了。

    boolean twoMinsElapsed = true;

  2. 裏面的代碼你在哪裏顯示alertDialog檢查這個布爾值以及

    if (distance[0] > mCircle.getRadius() && twoMinsElapsed) { 
          //block the showDialog() method until this value is set to true again 
          twoMinsElapsed=false; 
          showDialog(); 
         } 
    
  3. 設置一個dismisslistener您alertdialog

    alertDialog.setOnDismissListener(新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); 
    
        } 
    }); 
    

認爲這是一個僞代碼:)