0

メイン アクティビティはホーム画面へのショートカットを作成します。すべてうまくいきますが、ショートカットで開始するときに追加の値を知る必要があります。だから私はショートカットを作成するときにこれを使用しました

intent.putExtra(EXTRA_ID, "Some string info here");

そしてonResume、このような値を取得します

if (getIntent().hasExtra(EXTRA_ID))
    ShowToast(getIntent().getExtras().getString(EXTRA_ID));

すべて正常に動作します。いくつかの例を見てみましょう

  1. アクティビティが起動せず、ホーム画面のショートカットが押され、トーストが表示されます。いいですね。
  2. アクティビティはバックグラウンドで、ホーム画面のショートカットを押すとトーストが表示されます。いいですね。
  3. アクティビティは使用中です。別のアクティビティが開始されました。戻ると、トーストが表示されます。いいえ。
  4. アクティビティはバックグラウンドであり、余分なものはありません。ショートカットが押されました。何も表示されません。

3 番目の例では、想定どおりに動作します。しかし、アクティビティがショートカットによって再開/起動されたかどうかはどうすればわかりますか?

4

2 に答える 2

1

余分なものをどのように削除していますEXTRA_IDか?次のようにする必要があります。

onResume()

if (getIntent().hasExtra(EXTRA_ID)) {
    ShowToast(getIntent().getExtras().getString(EXTRA_ID));
    getIntent().removeExtra(EXTRA_ID);
}
于 2013-07-20T03:48:55.280 に答える
1

ランチャー インテントでエクストラを設定し、このアクティビティが任意の状態で開かれたときにエクストラを取得したいとします。

あなたが遭遇する問題:

アクティビティはバックグラウンドであり、余分なものはありません。ショートカットが押されました。何も表示されません。

これは、アクティビティが既に開始されており、ランチャー インテントが既存のタスクをフロント タスクとして使用するだけであり、そのような状況では余分なデータが失われるためです。

これを解決するには、次の 2 つの手順が必要です。

  1. android:launchMode="singleTask"マニフェストでこのアクティビティに追加します。
  2. 追加のデータ処理コードは、ではなくonCreate()との両方に入れます。onNewIntent()onResume()
于 2013-07-20T04:01:44.417 に答える