Android 立即将会话过期设置为所有活动
Android set session expired to all activities at once
我有一种方法可以检查用户是否有互联网连接,如果没有,他有 24 小时的时间再次上网,如果没有,应用程序应该停止并让用户登录 activity ,它正在工作,但问题是,我在登录后的第一个 activity 中调用此方法,因此代码仅在那个 activity 中运行,我需要一种方法来调用它整个应用程序而不必在每个 activity 中实例化它,有没有办法做到这一点?如何?
任何帮助将不胜感激!
代码如下:
public void checkConnection(){
Repositorio mRepositorio = new Repositorio(getApplicationContext());
SecurePreferences mSessao = new SecurePreferences(getApplicationContext(), "sessao");
CredencialModel mCredencialModel = mRepositorio.getCredencialPorId(Integer.valueOf(mSessao.getString("id_credencial")));
try {
Date dNow = new Date();
String dt = String.valueOf(mCredencialModel.getUltimo_sincronismo()); // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
Date lastConnection = sdf.parse(dt);
Date dateNow = sdf.parse(sdf.format(dNow));
if(!mRepositorio.temConexao() && (lastConnection.before(dateNow))){
fnTrocarUsuario();
}
} catch (ParseException e) {
e.printStackTrace();
}
}
private void fnTrocarUsuario() {
SecurePreferences mSessao = new SecurePreferences(getApplicationContext(), "sessao");
mSessao.clear();
// After logout redirect user to Login Activity
Intent i = new Intent(getApplicationContext(), MainActivity.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
getApplicationContext().startActivity(i);
finish();
}
第 1 步: 像这样创建基础 activity,
public class BaseActivity extends ActionBarActivity {
第 2 步: 将您的 checkConnection() 方法放入此 class.
第 3 步: 使用 BaseAcitivity 并扩展您应用中的任何 activity 并调用特定方法。
public class YourActivity extends BaseActivity {
让我知道这是否有效。
您应该通过应用程序注册以监听 activity 生命周期事件。更多信息在这里:
然后在 onActivityResumed 回调中您可以检查连接。
我有一种方法可以检查用户是否有互联网连接,如果没有,他有 24 小时的时间再次上网,如果没有,应用程序应该停止并让用户登录 activity ,它正在工作,但问题是,我在登录后的第一个 activity 中调用此方法,因此代码仅在那个 activity 中运行,我需要一种方法来调用它整个应用程序而不必在每个 activity 中实例化它,有没有办法做到这一点?如何? 任何帮助将不胜感激!
代码如下:
public void checkConnection(){
Repositorio mRepositorio = new Repositorio(getApplicationContext());
SecurePreferences mSessao = new SecurePreferences(getApplicationContext(), "sessao");
CredencialModel mCredencialModel = mRepositorio.getCredencialPorId(Integer.valueOf(mSessao.getString("id_credencial")));
try {
Date dNow = new Date();
String dt = String.valueOf(mCredencialModel.getUltimo_sincronismo()); // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
Date lastConnection = sdf.parse(dt);
Date dateNow = sdf.parse(sdf.format(dNow));
if(!mRepositorio.temConexao() && (lastConnection.before(dateNow))){
fnTrocarUsuario();
}
} catch (ParseException e) {
e.printStackTrace();
}
}
private void fnTrocarUsuario() {
SecurePreferences mSessao = new SecurePreferences(getApplicationContext(), "sessao");
mSessao.clear();
// After logout redirect user to Login Activity
Intent i = new Intent(getApplicationContext(), MainActivity.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
getApplicationContext().startActivity(i);
finish();
}
第 1 步: 像这样创建基础 activity,
public class BaseActivity extends ActionBarActivity {
第 2 步: 将您的 checkConnection() 方法放入此 class.
第 3 步: 使用 BaseAcitivity 并扩展您应用中的任何 activity 并调用特定方法。
public class YourActivity extends BaseActivity {
让我知道这是否有效。
您应该通过应用程序注册以监听 activity 生命周期事件。更多信息在这里:
然后在 onActivityResumed 回调中您可以检查连接。