如何在每个规定的非活动时间后停止显示警报对话框,无论登录/注销状态如何



我遇到一个问题,警报对话框每2分钟就会出现一次;无论登录/注销状态如何。

如果用户已登录,2分钟后将显示警报对话框,用户将因不活动而注销,用户将重定向到登录页面(正确功能)。但是,当用户最初未登录时,警报对话框仍会在2分钟后显示(功能不正确)。

因此,当用户未登录时,如何确保AlertDialog不会在规定的非活动时间后显示?

以下是相关的代码片段:

检查不活动的方法:

//METHOD USED FOR INACTIVITY LOGOUT
//EMPLOY THE HANDLER METHOD FOR OCCURANCE OF FUTURE FUNCTION: DISCONNECTHANDLER
public static class MyBaseActivity extends Activity {
    public static Handler disconnectHandler = new Handler(){
        public void handleMessage(Message msg){ 
        }
    };  
}
private Runnable disconnectCallback= new Runnable(){
    @Override
    public void run(){
        //Get the Resume Time & get difference in Time for Logout
        long endTime= System.currentTimeMillis();
        Log.i("RootActivity:Runnabe()","******endTime=******"+endTime);
        long diff = endTime - startTime;
        long secInt = (diff /1000); //conversion of milliseconds into seconds
        Log.i("RootActivity:onRun()","******sectInt=******"+secInt);
        if (secInt > Inactivity_Timeout){// SET EXIT SCREEN INTERVAL LOGOUT
        IdleLogout();
        }   
    }
};

注销方法:

//LOGOUT METHOD & CLEARING OF SHARED PREFERENCE CREDENTIALS
public void IdleLogout(){
    Log.i("RootActivity:IdleLogout()","******APP LOGGEDOUT******");
    SharedPreferences pref = getSharedPreferences(getString(R.string.pref_current_user), MODE_PRIVATE);             
    SharedPreferences.Editor editor = pref.edit();
    editor.clear();     // CLEAR ALL FILEDS
    editor.commit();    // COMMIT CHANGES
    Log.i("RootActivity:IdleLogout()","******loginButton is set******");
    setloginButton();   // Change logout button to login
    RootActivity.alertDialog(RootActivity.this,getCustomIntent(RewardsActivity.class)).create().show();
}

调用警报对话框的方法:

static Builder alertDialog(final Activity act,final Intent yourintent){
    Log.i("RootActivity:alertDialog","******Session Logout Info******");
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(act);
    alertDialog.setTitle("SESSION LOGOUT NOTICE");
    alertDialog.setMessage("You Have Been Logged Out Due To Inactivity." +
            "Please Login To Access Your Profile.");
    alertDialog.setCancelable(false);
    //SETTING OF OK BUTTON
    alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            act.startActivity(yourintent);//Return page to PROPERTYACTIVITY
            }
   }); return alertDialog;
}

检查用户是否登录的方法:

  public void checkLogin(){
//CONDITION TO CHECK IF USER IS LOGIN, IF TRUE, CALL METHOD IdleLogout()
    if(getSharedPreferences(getString(R.string.pref_current_user), MODE_PRIVATE).getString(
    getString(R.string.pref_password), "") != ""){
        IdleLogout();
    }return;
}

disconnectCallback调用IdleLogout()时,检查凭据是否存在。如果存在凭据,则只调用IdleLogout(),否则不调用。如果我正确理解你的代码,那么它将停止弹出警报对话框

private Runnable disconnectCallback= new Runnable(){
    @Override 
    public void run(){ 
        //Get the Resume Time & get difference in Time for Logout 
        long endTime= System.currentTimeMillis(); 
        Log.i("RootActivity:Runnabe()","******endTime=******"+endTime); 
        long diff = endTime - startTime; 
        long secInt = (diff /1000); //conversion of milliseconds into seconds 
        Log.i("RootActivity:onRun()","******sectInt=******"+secInt); 
        if (secInt > Inactivity_Timeout){// SET EXIT SCREEN INTERVAL LOGOUT 
         if(getSharedPreferences(getString(R.string.pref_current_user), MODE_PRIVATE).getString(
        getString(R.string.pref_password), "") != ""){
            IdleLogout(); 
           } 
        }    
    } 
}; 

您可以这样做:

保持isLoggedIn 的布尔值

最初,将其声明为

isLoggedIn = false;

当用户成功登录时,您可以将该值设为true

稍后,在显示警报对话框之前,请检查布尔值。

if(isLoggedIn){
    //show alert
}
else{
    //do nothing
}

希望能有所帮助。

最新更新