Android 如何在用户恢复应用程序后在“活动”中显示警报对话框
手头问题: 当应用程序被推到后台或屏幕超时时,应用程序本身将执行自动会话超时注销。因此,为了更好地与用户交互,我在一个警报对话框中加入了一个警报,通知用户由于会话超时帐户已注销,并要求他们重新登录。会话超时方法工作正常且正确 但是,当我将AlertDialog方法放在onResume()中时,无法获得想要的结果。下面是已经完成的代码片段。请任何人提供帮助,以便在用户恢复活动时显示AlertDialogAndroid 如何在用户恢复应用程序后在“活动”中显示警报对话框,android,user-interface,android-alertdialog,session-timeout,Android,User Interface,Android Alertdialog,Session Timeout,手头问题: 当应用程序被推到后台或屏幕超时时,应用程序本身将执行自动会话超时注销。因此,为了更好地与用户交互,我在一个警报对话框中加入了一个警报,通知用户由于会话超时帐户已注销,并要求他们重新登录。会话超时方法工作正常且正确 但是,当我将AlertDialog方法放在onResume()中时,无法获得想要的结果。下面是已经完成的代码片段。请任何人提供帮助,以便在用户恢复活动时显示AlertDialog //EDITED FOR SESSION LOGOUT //WHEN APP IS IN ID
//EDITED FOR SESSION LOGOUT
//WHEN APP IS IN IDLE OR WHEN USER DEVICE SCREEN IS OFF, WILL CALL ON THE METHOD TO LOGOUT USER
@Override
protected void onResume() {
super.onResume();
setloginButton();
EnquiryActivity.PROPERTY = 0;
//EDITED FOR SESSION LOGOUT
//Get the Resume Time
resumeDate = new Date();
long diff = resumeDate.getTime() - curDate.getTime();
long secInt = diff / 1000 % 60; //conversion of milliseconds into human readable form
if (secInt > Inactivity_Timeout){// SET EXIT SCREEN INTERVAL LOGOUT
IdleLogout();
AlertDialog();
}
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
// TO LOG APP HAS EXITED AND IS PUSHED TO BACKGROUND PROCESS(25/08/2014)
.....
}
//Perform Check if User is still Login as an user
public void checkLogin(){
//CONDITION TO CHECK IF USER IS LOGIN, IF TRUE, CALL METHOD
....
}
public void startUserInactivityDetectThread(){
new Thread(new Runnable() {
public void run() {
// PROVIDING AN INFINITE LOOP WHEN FOLLOWING CONDITIONS ARE TRUE.
while(true) {
//Perform Thread to check on condition and run idlelogout
}
}
}).start();
}
public void IdleLogout(){
// Method to perform logout and erase shared preference credential
}
// TO INFORM USER ON THE STATUS OF LOGOUT WHEN USER RESUMES THE APP
public void AlertDialog() {
AlertDialog alertDialog = new AlertDialog.Builder(RootActivity.this).create();
alertDialog.setTitle("SESSION LOGOUT NOTICE");
alertDialog.setMessage("PLEASE LOGIN TO ACCESS YOUR PROFILE.");
//SETTING OF OK BUTTON
alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "You clicked on OK", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.og.ascendas.spacetobe"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
});alertDialog.show();// SHOW ALERT MESSAGE
}
试试这个,我想你的建议是好的。所以,解决你的问题完全是你的问题..哈哈 用这种方式实现它,这样你就会像这样(Edditing从这里开始) 我将startActivity放在alertdialog中,因此当用户单击有关登录的ok时,它会将用户带到登录屏幕,就像您希望的那样,然后让onresume进行显示() 或者把它放在IdleLougout() 对不起,我在昏昏欲睡的状态下写下了一些小错误。纠正一些小错误 如果你把它放在idleLougout()中,不要直接在Resume中调用它,只需调用你的idleLougout,这也不相关
editor.remove(getString(R.string.pref_username)); //REMOVE USERNAME FROM STRING
editor.remove(getString(R.string.pref_password)); //REMOVE PASSWROD FROM STRING
因为clear()就是这样做的。。还要注意删除startActivity(getCustomIntent(PropertyActivity.class))//将页面返回到PROPERTYACTIVITY。从你的懒惰中…好的。。
让我知道它是否好y您是否将您的方法命名为与类相同的名称(AlertDialog)?@SagarPilkhwal我运行它时,它没有登录到Logcat!!实际上,我无法将alertdialog方法置于循环条件之外,因为这将导致函数失败,用户将无法登录,alertdialog消息将保留showing@SagarPilkhwal一点也不。仍然trying@SagarPilkhwal是的,idleLougout方法在if(secInt>Inactivity\u Timeout){loop@SagarPilkhwal那么我可以知道你在暗示什么吗??我还是不明白。好吧,我会尽量让你知道!!谢谢你的建议,我只是想确认一下。我必须将第二个alertDialog()方法的名称更改为其他名称,对吗?否则,它实际上就不正确了。其次,在alertDialog.create();,它说明需要添加一个cast??第三,alertDialog().show();,它声明它不能被解析或者不是一个字段,这个方法应该放在if(secInt>Inactivity\u Timeout){condition,yes?yes第一个示例是我在第二个示例中所做的一般示例,所以复制粘贴第二个示例以替换您的public void AlertDialog(){}方法获取它..并在您的onresume中显示它..我没有理解您在第二次任务中的意思。在第三次任务中,将生成器方法与onresume放在同一个类中。@ernestree为了更安全,请将alertdialog放在idleLougout(){}方法,当注销完成后,会弹出登录对话框。但我知道您的实现与alertdialog一起工作。整个会话注销方法都在工作,就是alertdialog,我是一个问题。
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
setloginButton();
EnquiryActivity.PROPERTY = 0;
//EDITED FOR SESSION LOGOUT
//Get the Resume Time
resumeDate = new Date();
long diff = resumeDate.getTime() - curDate.getTime();
long secInt = diff / 1000 % 60; //conversion of milliseconds into human readable form
if (secInt > Inactivity_Timeout){// SET EXIT SCREEN INTERVAL LOGOUT
IdleLogout();
RootActivity.alertDialog(RootActitvity.this,getCustomIntent(PropertyActivity.class)).create().show();
}
}
public void IdleLogout(){
// Method to perform logout and erase shared preference credentials
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
setloginButton(); // Change logout button to login
RootActivity.alertDialog(RootActitvity.this,getCustomIntent(PropertyActivity.class)).create().show();
}
editor.remove(getString(R.string.pref_username)); //REMOVE USERNAME FROM STRING
editor.remove(getString(R.string.pref_password)); //REMOVE PASSWROD FROM STRING