私はActivity X
を実装します。私はService S
からPendingIntent P
を得ました。私は確かに、Pはが不明であることを指摘していますActivity Y
その結果setResult
メソッドで結果Rを返します。結果のためにPendingIntentを開始します
X.onActivityResult
の結果Rを受け取るには、XでPを開始する必要がありますか?
私はActivity X
を実装します。私はService S
からPendingIntent P
を得ました。私は確かに、Pはが不明であることを指摘していますActivity Y
その結果setResult
メソッドで結果Rを返します。結果のためにPendingIntentを開始します
X.onActivityResult
の結果Rを受け取るには、XでPを開始する必要がありますか?
私はこの問題を掘りいくつかの時間を費やし、私の結論は、それが両方活動(X
とY
)で特定の変更を加えることなく不可能であるということである:Activity X
で
:
PendingIntent
(P2
)を作成する必要があります。Activity X
コンテキストでは、X.createPendingResult
を使用してください。さて、P2
でデータを送信すると、X.onActivityResult
が呼び出されます。PendingIntent P2
を添付してから、send
-ingする必要があります。 Activity Y
で:あなたは、そのgetIntent()
からPendingIntent P2
を抽出する必要があり
setResult
に電話するのではなく、一部のローカルフィールドで結果を設定してください。onDestroy
を無効にし、そこからPendingIntent P2
を送信する必要があります。なぜこのようになりますか?
私はそれは種類のセキュリティに関するものだと思います。 Activity Y
は、別タスク(Activity X
)で開始できます。たぶんsetResult
は、と同じタスク内で結果がに達するのを処理することを意図していますか?タスクの定義については、hereを参照してください。
私は自分の質問に答えました。私は専門家ではなく、私は間違っているかもしれません。誰かが確認するまで、この回答を受け入れることは賢明ではないかもしれません。 – wrygiel
Googleはサービスが同じシナリオでパーミッションエラーを解決するためにPendingIntent
オブジェクトを使用しています再生:
IntentSender intentSender = pendingIntent.getIntentSender();
activity.startIntentSenderForResult(intentSender, REQUEST_CODE, null, 0, 0, 0);
は、ドキュメントのためActivity.startIntentSenderForResult()を参照してください。
PS。通常の 'startActivityFotResult'呼び出しと同様に、Yがキャンセルされたとき(Rは' RESULT_CANCELED'と同じです)に通知されたいと思います。 – wrygiel