私はアプリを持っています(多くの活動)。アプリがバックグラウンドになったときに、ユーザーの資格情報などのいくつかの値をクリアしたいと考えています。アプリがバックグラウンドになったことを知るにはどうすればよいですか? ホームボタンをインターセプトしようとしましたが、できないようです。onPause() を呼び出すと、あるアクティビティから別のアクティビティに移動するたびに呼び出されます。私はたくさん検索しましたが、具体的なものは何も得られませんでした。
助けてください
私はアプリを持っています(多くの活動)。アプリがバックグラウンドになったときに、ユーザーの資格情報などのいくつかの値をクリアしたいと考えています。アプリがバックグラウンドになったことを知るにはどうすればよいですか? ホームボタンをインターセプトしようとしましたが、できないようです。onPause() を呼び出すと、あるアクティビティから別のアクティビティに移動するたびに呼び出されます。私はたくさん検索しましたが、具体的なものは何も得られませんでした。
助けてください
バックグラウンドに移行するアプリの特定の定義がないため、これは Android では困難です。アプリがフォーカスを失う原因となるイベントは他にもたくさんあるため、ホーム キーを検出するだけでは十分ではありません。
たとえば、着信があるとアプリは「バックグラウンドに移行」しますが、ユーザーにはそうではないように見えます。
目的を達成するために考えられる方法は、アクティビティの OnPause メソッドと OnResume メソッドを使用して、アプリケーション クラスのサービスまたは単純なタスクと通信することです。(あなたの活動とは無関係のもの)。
OnPause が呼び出されたら、タイマーを開始します。OnResume が呼び出されたら、タイマーを停止します。
タイマーが特定の時間内に停止しない場合は、アプリが「バックグラウンドにある」と見なされ、データを消去できます。
上記の着信コールの例のような単純な変更を処理するのに十分な時間を確保してください。状況にもよりますが、おそらく 1 ~ 2 分です。
目標を達成するには、データを含むアクティビティの onStop() 状態でデータをクリアする方法と、(言及したように) ホーム プレス イベントをキャッチする方法の 2 つがあると思います。
ホームプレスイベントを検出するには、オーバーライドする必要があります:onAttachedToWindow()
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
次に、次のデータを消去します。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//Put your Codes here to Clear Data
}
});