我遇到一个问题,警报对话框每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
}
希望能有所帮助。