2011-02-01 1 views
13

ビットで使用される余分の最後のセットでそれを開始します。私は、クリックされたホーム画面のウィジェットを持っているアンドロイド:「最近使ったアプリケーション」から起動するアプリはここに私のために混乱し、問題の意図

、意図に入れて、いくつかのエキストラと私のメインのアプリのアクティビティを開始します。

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

このすべてが正常に動作し、それは私の活動を開始し、予想通り、私の活動は、エキストラを受けます。これらのエクストラを処理し、別のアクティビティを開始します。

ユーザーがホーム画面ウィジェットをクリックしてこのようにメインアクティビティを開始すると、「最近のアプリケーション」(「ホーム」キーを押したまま)の方法でアプリに入ると、私が望んでいない(そして主なアクティビティが表示されるだけでなく、2番目のアクティビティが開くようになる)処理が発生します。

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

多くのご協力ありがとうございます! r3mo

注:

はここに回避策を発見: Android keeps caching my intents Extras, how to declare a pending intent that keeps fresh extras?

を私はウィジェットではオフに設定されている意図をタイムスタンプするつもりだ、私はアンドロイド1.5

EDITによMain.javaでタイムスタンプが最近チェックされていることを確認してください。もしそうなら、私は処理を進めます。もしそうでなければ、私はMain.javaアクティビティを表示します。

公式の解決策があるかどうか聞いてください。

答えて

0

エクストラを使用した後は、意図から削除する必要があります。

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

感謝。私はMain.java(これはウィジェットによって開始されます)でこれを試しましたが、これは何の違いもないようです。これは、ローカル変数「追加」をクリアするだけではないでしょうか?私は問題はAndroidが最後のセットのエクストラを使って「最近のアプリケーション」のアクティビティを開始する方法にあると信じている。 – r3mo

9

"通常の"スタ​​ートアップと "最近のアプリケーション"の起動をインテントフラグをチェックすることで区別できます。

マニュアルに従って、

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).

だから、あなたは余分を無視することを選択することができます。マルタインが言うように

38

、あなたのアプリケーションは、このようなフラグFLAG_ACTIVITY_LAUNCHED_FROM_HISTORYセット、との意向を使用して開かれているかどうかをチェックすることができます:提案のための

int flags = getActivity().getIntent().getFlags();  
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) { 
    // The activity was launched from history 
} 
+3

残念ながら、このフラグは、必要なときに確実に設定されません。 –

関連する問題