、または、私はインテントでいくつかの余分なデータを送信してコールを知る必要がありますか?getIntent
のような事前定義されたメソッドがない場合は、何かしますか?startActivityForResultを使用してアクティビティが呼び出されたか、単にstartActivityを使用して呼び出されたかどうかを知る方法?
答えて
私はこの質問が既に回答されて知っているが、私はより良いを持っていますソリューション。
アクティビティが開始されたときstartActivity()
によってgetCallingActivity()
メソッドがターゲットアクティビティでnull
を返します。 startActivityForResult()
によって呼び出されたとき、呼び出しアクティビティの名前が返されます。
詳細はgetCallingActivityを参照してください。
アクティビティを終了する前にアクティビティをチェックインすることができます。 resultがnullの場合、アクティビティはによって呼び出され、resultがnullでない場合、アクティビティはstartActivityForResult()
によって呼び出されました。それでおしまい。
例: -
if (getCallingActivity() == null) {
//This Activity was called by startActivity
} else {
//This Activity was called by startActivityForResult
}
"0"と "1"のようなフラグを入れて、それを意図的に入れることができるので、startActivityForResultのstartActivityまたは "1"は "0"なら単純です。
あなたが本当に必要以上のデータを扱うので、これは一種の厄介です。 @PankajKumarの下の答えは、最もきれいなものです。 – WarrenFaith
あなたのマニフェストで同じアクティビティに対していくつかのインテントを公開し、呼び出し元のインテントをテストして動作を調整する必要があると思います。
例マニフェストであなたの活動インテントフィルタのために:あなたのアクティビティのonCreateで
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
と対応するコード:
if (getIntent().getAction().equals(Intent.ACTION_VIEW)) {
// do whatever you need to do here
} else if (getIntent().getAction().equals(Intent.ACTION_PICK)){
...
}
これはまた泥のアプローチ – Harinder
旗よりもクリーナーソリューションです...ありがとう – WarrenFaith
@WarrenFaithありがとうございます。 –
'getCallingActivity()'は、開始アクティビティのアクティビティ起動モードが 'singleTask'または' singleInstance'であるか、 'FLAG_ACTIVITY_NEW_TASK'で開始された場合に' null'を返すことに注意してください。 – EpicPandaForce