2

Webview をロードするメイン アクティビティ内で、Webview が起動された場所に応じて、ロードする URL が決定されます。

Bundle extras = getIntent().getExtras();
       if (extras != null) {
           String theurl =  getIntent().getExtras().getString("url");
            webView.loadUrl(theurl);    
       } else {
             webView.loadUrl("http://mysite.com");
       } 

アプリケーションが新しいインスタンスで、ホーム画面から読み込まれた場合、デフォルトの URL が読み込まれます。

アプリケーションが実行されていないときに、Google クラウド メッセージング経由で送信された通知をクリックすると、アプリケーションはカスタム URL を読み込みます。

これは期待どおりに機能します。

私の問題は、アプリケーションが既にバックグラウンドで実行されている場合です。通知をクリックすると、アプリが前面に表示されますが、新しい URL が読み込まれず、デフォルトのままです。

フラグについてはよくわかりません。以前にこの問題がありましたが、フラグの特定の組み合わせで修正されました。

        Intent notificationIntent = new Intent(context, MainActivity.class);
    notificationIntent.putExtra("url", url);

    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );

    int requestID = (int) System.currentTimeMillis();

    PendingIntent intent = PendingIntent.getActivity(context, requestID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);

助けていただければ幸いです。

編集

フラグ PendingIntent.FLAG_CANCEL_CURRENT を追加すると、これで問題はほぼ解決しますが、メイン アクティビティ全体がリロードされますが (スプラッシュ スクリーンが呼び出されます)、既存の Web ビューを再利用したいと考えています。

4

1 に答える 1

1

これはあなたが探しているフラグです: FLAG_ACTIVITY_CLEAR_TASK

Context.startActivity() に渡された Intent に設定されている場合、このフラグにより​​、アクティビティに関連付けられている既存のタスクが、アクティビティが開始される前にクリアされます。つまり、アクティビティは空のタスクの新しいルートになり、古いアクティビティは終了します。これは、FLAG_ACTIVITY_NEW_TASK と組み合わせてのみ使用できます。

編集: webview コードを onResume に配置し、フラグを使用しない場合、正常に動作するはずです。

于 2013-09-29T01:13:46.727 に答える