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 1.5を使用しています

編集:

ここで回避策を見つけました: Android はインテント エクストラをキャッシュし続けます。新しいエクストラを保持する保留中のインテントを宣言する方法は?

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

これに対する公式の解決策があるかどうかを知りたいです。

4

3 に答える 3

41

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORYMartijn が言うように、次のように、フラグが設定された Intent を使用して、アプリケーションが開かれているかどうかを確認できます。

int flags = getActivity().getIntent().getFlags();       
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
    // The activity was launched from history
}
于 2012-04-03T20:00:01.340 に答える
11

Intent フラグをチェックすることで、「通常の」起動と「最近のアプリケーション」の起動を区別できると思います。と呼ばれる旗があります。

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

したがって、このフラグが設定されている場合、エクストラを無視することを選択できます。

于 2011-04-11T15:12:10.670 に答える
0

エクストラを使用した後は、インテントからエクストラをクリアする必要があります。

Bundle extras = getIntent().getExtras();
if (extras == null) {
    return;
}
String value1 = extras.getString("Value1");
String value2 = extras.getString("Value2");
extras.clear();
于 2011-02-01T18:06:36.150 に答える