2011-09-27 81 views

回答

55

我知道這個問題已經回答了,但我有一個更好的解決方案..

當您的活動開始時只需通過startActivity() a getCallingActivity()方法在目標活動將返回null。當它被startActivityForResult()調用時,它將返回呼叫活動的名稱。

請參閱getCallingActivity瞭解更多詳情。

因此,您可以在完成調用活動之前檢查活動。如果結果爲空Activity由startActivity()調用,如果結果不爲null,則Activity由startActivityForResult()調用。而已。

例如: -

if (getCallingActivity() == null) { 
    //This Activity was called by startActivity 
} else { 
    //This Activity was called by startActivityForResult 
} 
+0

比通過意圖的國旗更清潔的解決方案...謝謝 – WarrenFaith

+0

@WarrenFaith謝謝。 –

+0

請注意,如果已啓動活動的活動啓動模式爲「singleTask」或「singleInstance」,或者以「FLAG_ACTIVITY_NEW_TASK」開頭,則getCallingActivity()將返回null。 – EpicPandaForce

3

你可以放置一個像「0」和「1」這樣的標誌,把它放在意圖中,所以如果「0」那麼它的startActivity或者「1」就是startActivityForResult ......這很簡單,不是嗎?

+0

因爲你處理更多的數據比你真的需要這有點凌亂。 @PankajKumar下面的答案是最乾淨的答案。 – WarrenFaith

6

我認爲你應該在你的清單中暴露同一個活動的幾個意圖,然後測試調用意圖以適應你的行爲。

例在清單中的活動意圖過濾:

<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> 

和相應的代碼在活動的onCreate:

if (getIntent().getAction().equals(Intent.ACTION_VIEW)) { 
     // do whatever you need to do here 
} else if (getIntent().getAction().equals(Intent.ACTION_PICK)){ 
... 
} 
+0

這也是一個gud方法 – Harinder

相關問題