0

現在、私は意図的に取り組んでいます。しかし、私はいくつかの問題を抱えています。

問題は、A と B の 2 つのアプリがあることです。B のランチモードは android:launchMode="singleTop" です。

ここで、A から B にインテントを渡したいのですが、「sdcard/Android」(ディレクトリ パス) と言います。その後、A が終了し、B が作成/再開/onNewintent されます。最初に、B はインテント文字列「sdcard/Android」を受け取ります。これはまさに私が望んでいるものです。

次に、ランチャーのホームボタンを押して A をもう一度開き、「sdcard/Music」という新しいデータを B に渡します。 B のインテント データは「sdcard/Android」のままです。

A が 2 回目に B にデータを渡すと、B で onNewintent メソッドが呼び出されると思います。2回目に正しいデータをBに渡すにはどうすればよいですか?

@Override
public void onCreate(Bundle savedInstanceState) {
    onNewIntent(getIntent());
}

@Override
public void onNewIntent(Intent intent)
{
    Log.i("TAG", intent.getStringExtra("path"));
}

onNewIntent を上書きする必要があることはわかっています。最初に、B は onCreate メソッドに入ります。2 回目は、onNewIntent メソッドに入ると予想していました。ただし、onResumed メソッドに入ります..!

4

1 に答える 1

2

メソッドonNewIntent(...)は初めて呼び出されるのActivity Bではなく、2 回目以降に呼び出されるだけActivity Bです。

次のようなことを行うことで、オリジナルを「書き直す」ことができIntentます...

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
}

@Override
protected void onResume() {
    super.onResume();
    handleIntent(getIntent());
}

private void handleIntent(Intent intent) {
    // The intent parameter here will be the original `Intent` the first
    // time Activity B is started. It will be the new Intent after that
    // as onNewIntent(...) re-writes it with the call to setIntent(...)
}
于 2012-04-16T06:38:49.847 に答える