我有一个方法可以检查用户是否有互联网连接,如果没有,他有 24 小时的时间再次上线,如果没有,应用程序应该停止并将用户带到登录活动,它正在工作,但问题是,我在登录后的第一个活动中调用此方法,因此代码仅在该活动中运行, 我需要一种方法在整个应用程序中调用它,而无需在每个活动中实例化它,有没有办法做到这一点?如何?任何帮助将不胜感激!
这是代码:
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:创建这样的基本活动,
public class BaseActivity extends ActionBarActivity {
Step-2 : 把你的 checkConnection() 方法放在这个类中。
步骤3:使用基本活动性并扩展应用中的任何活动并调用特定方法。
public class YourActivity extends BaseActivity {
让我知道这是否有效。
您应该通过应用程序注册以侦听活动生命周期事件。 更多信息在这里:
https://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)
然后在 onActivityResumed 回调中,您可以检查连接。