2011-09-27 7 views

答えて

55

私はこの質問が既に回答されて知っているが、私はより良いを持っていますソリューション。

アクティビティが開始されたとき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

旗よりもクリーナーソリューションです...ありがとう – WarrenFaith

+0

@WarrenFaithありがとうございます。 –

+0

'getCallingActivity()'は、開始アクティビティのアクティビティ起動モードが 'singleTask'または' singleInstance'であるか、 'FLAG_ACTIVITY_NEW_TASK'で開始された場合に' null'を返すことに注意してください。 – EpicPandaForce

3

"0"と "1"のようなフラグを入れて、それを意図的に入れることができるので、startActivityForResultのstartActivityまたは "1"は "0"なら単純です。

+0

あなたが本当に必要以上のデータを扱うので、これは一種の厄介です。 @PankajKumarの下の答えは、最もきれいなものです。 – WarrenFaith

6

あなたのマニフェストで同じアクティビティに対していくつかのインテントを公開し、呼び出し元のインテントをテストして動作を調整する必要があると思います。

例マニフェストであなたの活動インテントフィルタのために:あなたのアクティビティの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)){ 
... 
} 
+0

これはまた泥のアプローチ – Harinder