0

アプリケーションがバックグラウンドになり、15 分以上後に再開された場合、アプリケーションからログアウトする必要があります。

提供されたソリューションを実装した後、コードを参照してください

public class BaseActivity extends Activity {
    BaseActivity context;
    private AlarmManager alarmMgr;
    private PendingIntent alarmIntent;

    BaseActivity() {
        context = this;
    }

    @Override
    protected void onStart() {
        super.onStart();
        if (alarmMgr != null) {
            alarmMgr.cancel(alarmIntent);
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(BaseActivity.this, SampleBootReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

        alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1 * 30 * 1000, alarmIntent); // 15

    }

    class SampleBootReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "alarm", Toast.LENGTH_SHORT).show();
            Intent intent_login = new Intent(context, SignIn.class);
            intent_login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent_login);
            overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
        }
    }
}
4

4 に答える 4

0

次のコードを試してください

//Class level variable 
private boolean inBackground = false;

@Override
public void onResume()
{
     inBackground = false;
}


@Override 
public void onPause()
{
    inBackground = true;
    new CountDownTimer( 900000 , 1000 ) 
    {
         public void onTick(long millisUntilFinished) {}

         public void onFinish() 
         {
             if ( inBackground )
             {
                  // code to logout
             }
         }
    }.start();
}

アプリケーションがバックグラウンドになると、デフォルトのコントロールがonPause()メソッドになります。ここでは、15 分後にログアウト操作を実行するCountDownTimerを使用しています。

于 2014-04-16T10:32:58.503 に答える
0

http://developer.android.com/training/basics/activity-lifecycle/index.htmlで入手できるアクティビティのライフサイクルについて詳しく調べてみてください。アプリがバックグラウンドになります。これは、現在のアクティビティが onpause() 状態または onStop() になることを意味します。これらの活動サイクルでコーディングを行う必要があります。この状態では、15 分後にアプリを起動する場合のように、特定の時間に特定のタスクを実行できるアラーム マネージャーを呼び出すことができます。

于 2014-04-16T10:49:23.837 に答える
0

AlarmManagerを使用して、今から 15 分後にアラームをスケジュールし、アラームが開始されたらアプリからログアウトできます。次に、アプリを再度開いたときに、現在のアラームをキャンセルする必要があるため、ユーザーが 15 分間アプリを開いた場合にログアウトが実行されないようにすることができます。ここで完全な例を見つけることができます。このアプローチの良い点は、アプリケーションが実行されていてはならないということです。

要約すると、コピー&ペースト愛好家のために:

アラームをスケジュールするには:

private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
...
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() +
    15 * 60 * 1000, alarmIntent); // 15 minutes

システムからログアウトする BroadcastReceiver:

public class SampleBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // LOGOUT
    }
}

進行中のアラームをキャンセルするには:

if (alarmMgr!= null) {
    alarmMgr.cancel(alarmIntent);
}
于 2014-04-16T10:31:05.947 に答える