起動 - ディープ リンク android 実装




Android: '最近のアプリケーション'からアプリを起動すると、インテントに使用されている最後のエクストラが起動します (2)

私はあなたがインテントフラグをチェックすることによって、 "通常の"スタ​​ートアップと "最近のアプリケーション"のスタートアップを区別できると思います。 と呼ばれる旗があります

Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

ドキュメントによると:

This flag is not normally set by application code, but set for you by the system if this activity is being launched from history (longpress home key).

したがって、このフラグが設定されていると、追加情報を無視することができます。

ここで私にとって混乱している問題のビット:

私は、ホーム画面ウィジェットを持っています。これをクリックすると、いくつかのエクストラをインテントに入れてメインのアプリケーションアクティビティを開始します:

Intent start = new Intent(context, Main.class);
start.putExtra("action", "showXYZ");
start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(start);

これはすべて正常に動作し、それは私の活動を開始し、私の活動は期待どおりのエクストラを受け取ります。 これらのエクストラを処理し、別のアクティビティを開始します。

ユーザーがホーム画面ウィジェットをクリックしてこのようにメインアクティビティを開始すると、 '最近のアプリケーション'の方法(「ホーム」キーを押したまま)でアプリに入ると、エクストラのメインアクティビティが開始され、処理が行われます私は望んでいない(そして、単に見せられる主な活動ではなく、第二の活動を開くように導く)。

このための回避策はありますか? '最近のアプリケーション'の方法からアプリを起動するときは、最後のセットを使わずにメインアクティビティを開始するだけです。

助けてくれてありがとう! r3mo

注:私はアンドロイド1.5です

編集:

ここで回避策を見つけました: Androidには自分のインテントエクストラがキャッシュされています。新鮮なエクストラを保留する保留中のインテントを宣言する方法は?

私は、ウィジェットによって意図されたインテントをタイムスタンプし、Main.javaのタイムスタンプが最近であることを確認します。 もしそうなら、私は処理を進めます。 もしそうでなければ、私はMain.javaアクティビティを表示します。

これに公式な解決策があるかどうか聞いてみましょう。


それらを使用した後、あなたの意図からエキストラをクリアする必要があります。

Bundle extras = getIntent().getExtras();
if (extras == null) {
    return;
}
String value1 = extras.getString("Value1");
String value2 = extras.getString("Value2");
extras.clear();




extras