我有一个Android应用程序,需要用户登录凭据才能访问某些数据。我想要做的是,当用户决定退出整个APP而不是Activity时,如果不活动时间超过20秒,它将调用注销方法。因此,我需要一个能够检查应用程序是否在后台的运行代码,这个应用程序应该完成以下代码:
IdleLogout方法:
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
setloginButton(); // Change logout button to login
RootActivity.alertDialog(RootActivity.this,getCustomIntent(PropertyActivity.class)).create().show();
//startActivity(getCustomIntent(PropertyActivity.class)); //Return page to PROPERTYACTIVITY.
}
将获取当前活动时间
@Override
public void onStop(){
super.onStop();
//get the current time on exit
curDate = new Date();
Log.i("RootActivity:onStop()","******curDate=******"+curDate);
}
用户恢复应用时会占用活动时间
@Override
protected void onResume() {
super.onResume();
setloginButton();
EnquiryActivity.PROPERTY = 0;
//EDITED FOR SESSION LOGOUT
//Get the Resume Time
resumeDate = new Date();
Log.i("RootActivity:onResume()","******resumeDate=******"+resumeDate);
long diff = resumeDate.getTime() - curDate.getTime();
long secInt = diff / 1000 % 60; //conversion of milliseconds into human readable form
Log.i("RootActivity:onResume()","******sectInt=******"+secInt);
if (secInt > Inactivity_Timeout){// SET EXIT SCREEN INTERVAL LOGOUT
IdleLogout();
}
}
答案 0 :(得分:1)
您需要的是实施在后台运行且您的应用能够与之通信的服务。为此,您应该在 Application.onCreate(...)方法中启动该服务。然后,您应该创建一个基本活动(您的活动将继承),并实现onPause和onResume方法以向服务触发Intent,表明它们已进入onPause / onResume。
在 onPause(...)内触发的意图应指示服务开始倒计时(20秒左右)。
在 onResume(...)中触发的意图应指示取消倒计时的服务。
当您的上一个活动进入后台时, onPause()方法将被触发,而不会触发 onResume (取消倒计时),从而导致会话被清除如果时间过去了。
如果调用 onStop ,您将无法在Activity中显示对话框(因为它已经被销毁),所以我鼓励您使用Theme.Dialog的活动(或者它的一些味道)。
您可以使用 LocalBroadcastManager 与您的服务进行通信,并且不要忘记在 Service.onCreate(...)中以编程方式设置BroadcastReceiver。
了解代码并不总是最佳答案。
希望它能帮助您更深入地了解Android平台。
问候。