結果のためにアクティビティが呼び出されたかどうかを確認します


83

を使用して、結果を求めて何らかのアクティビティが呼び出されたstartActivityForResult()かどうか、または使用を開始しただけかどうかを知ることはできstartActivity()ますか?

結果が必要な場合は動作が異なるため、これを制御する必要があります。

回答:


166

ターゲットアクティビティのメソッドだけでアクティビティを開始するとstartActivity()getCallingActivity()が返されnullます。

によって呼び出されたときにstartActivityForResult()、呼び出しアクティビティの名前が返されます。

ドキュメントを参照してくださいgetCallingActivity()

このアクティビティを呼び出したアクティビティの名前を返します。これは、データのsetResult()送信先です。この情報を使用して、受信者がデータの受信を許可されていることを検証できます。

注:呼び出しアクティビティが結果を期待していない場合(つまりstartActivityForResult(Intent, int)、要求コードを含むフォームを使用していなかった場合)、呼び出しパッケージはnullになります。

戻り値

返信を受け取るアクティビティのComponentName。ない場合はnull。


1
FLAG_ACTIVITY_NEW_TASKでアクティビティを開始すると、機能しません:((エラーハンドラーのコンテキスト外でログインアクティビティを開始する必要がありました)。他のアイデアはありますか?ありがとうございます!
ventzy 2014年

アクティビティがフラグメントで開始されている場合、これは機能しません。fragment.getActivity()。startActivityForResult(intent、requestCode);
マリオレンチ2015

@MarioLenciそれは私にとって正しく動作します。アクティビティから始めてもフラグメントから始めても。
Robyer 2017

@MarioLenciは、フラグメント内にいるときに、直接getActivity().startActivityFor…実行startActivityForResultする必要があるフラグメントから呼び出す必要がないためです。
MartinMarconcini18年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.