Android设置会话一次过期到所有活动

时间:2015-01-27 10:46:24

标签: android session alarmmanager session-timeout android-alarms

我有一个检查用户是否有互联网连接的方法,如果他没有,他有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();

    }

2 个答案:

答案 0 :(得分:2)

第1步:像这样创建基本活动,

public class BaseActivity extends ActionBarActivity {

步骤2:将checkConnection()方法放在此类中。

第3步:使用BaseAcitivity并针对您应用中的任何活动进行扩展,并调用特定方法。

public class YourActivity extends BaseActivity {

让我知道这是否有效。

答案 1 :(得分:0)

您应该通过应用程序注册以侦听活动生命周期事件。更多信息:

https://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)

然后在onActivityResumed回调中,您可以检查连接。