タイムアウト通知を実装しようとしています。これが私がやりたいことです。アプリがバックグラウンド モードになった場合、5 分後に、アプリがサインアウトされることをユーザーに警告する必要があります。この通知の後、ユーザーがアプリを開くと、パスワードを要求する必要があります。ユーザーが正しいパスを入力すると、5 分前に離れた画面を取得する必要があります。私の問題は、ユーザーがパスワードを入力した後に取得するために残したアクティビティを保存できないことです。onSaveInstanceState() メソッド内にカウントダウンを追加し、現在のインテントのインスタンスを作成しました。次に、TimeOutActivity で、そのインスタンスで現在のアクティビティを渡すために、savedActivity というプロパティを定義しました。
private boolean isTimedOut;
private TimeOutActivity timOutActivity;
private CountDownTimer timer;
@Override
protected void onSaveInstanceState(Bundle state)
{
super.onSaveInstanceState(state);
if (timOutActivity == null)
{
timOutActivity = new TimeOutActivity();
timOutActivity.setIntent(new Intent(getApplicationContext(), TimeOutActivity.class));
**timOutActivity.savedActivity = this;**
initializeTimer();
}
}
private void initializeTimer()
{
timer = new CountDownTimer(60000, 1000)
{
public void onTick(long millisUntilFinished)
{
if (millisUntilFinished / 1000 == 55)
{
showSignOutWarning();
isTimedOut = true;
}
}
public void onFinish()
{
// Push local notification
isSignedOut = true;
}
}.start();
}
次に、 onStart() メソッドに次のコードを追加しました。
@Override
public void onStart()
{
super.onStart();
if (isTimedOut)
{
// Load timedOut activity
startActivity(timOutActivity.getIntent());
isTimedOut = false;
}
}
しかし、TimeOutActivity 内のアクティビティを取得したい場合、私のプロパティ (savedActivity) は null です。私は何を間違っていますか?現在のアクティビティを保存するより良い方法はありますか?
2014 年 10 月 31 日更新 Application を拡張する App.java というクラスを定義しました。このクラスにより、setter と getter を使用してグローバル変数を定義できます。以下のようなものです
public class NGVApp extends Application
{
private WebView webView;
public WebView getWebView()
{
return webView;
}
public void setWebView(WebView webView)
{
this.webView = webView;
}
}
次に、Application タグの AndroidManifest.xml にこれを追加しました
android:name="your.app.bundle.name.App"
次に、WebViewActivity onStop() メソッドで、次のように webView インスタンスを設定します。
((App) this.getApplication()).setWebView(webView);
そして最後に onCreate() メソッドに追加しました:
@Override
protected void onCreate(Bundle savedInstanceState)
{
if(((NGVApp) this.getApplication()).getSavedInstanceBundle() != null)
{
savedInstanceState = ((NGVApp) this.getApplication()).getSavedInstanceBundle();
}
}
webView のインスタンスを正常に取得できましたが、null ではなくなりましたが、webView のコンテンツ (タイムアウト前にユーザーが操作したもの) が含まれていません。