2012-02-13 39 views
26

我想知道我是否理解了requestCode的概念。 這是什麼整數並不要緊,什麼整數我在將其設置爲:請求代碼在startActivityForResult中的含義是什麼

private static int CAMERA_REQUEST = ???; 

謝謝

+4

下面是它的開發文檔:http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29 – bschultz 2012-02-13 21:19:30

回答

8

看我的例子here。您必須設置的整數可以是任何一個正數。只是不要讓它們相同,你不想混合它們,是嗎?並且不要將它們設置爲0 - 它沒有返回結果,恕我直言,我有奇怪的行爲0。至於否定,也不要使用它們,它們被保留用於其他callActivities函數的負面結果。

+2

謝謝,但我仍然不會不知道它的目的。它只是一個標識符,我可以隨機選擇它? – user1178988 2012-02-13 22:29:02

+2

是的。這是你,誰將讀取請求代碼,只*寫入*和*比較相同的值。 – Gangnus 2012-02-13 22:37:05

47

requestCode可幫助您確定您從哪個Intent返回。例如,假設您的活動A(主要活動)可以調用活動B(相機請求),活動C(音頻記錄),活動D(選擇聯繫人)。

每當隨後調用的活動B,C或D完成並需要將數據傳回給A時,現在需要在您的onActivityResult中確定從哪個Activity返回並相應地放置處理邏輯。

 


    public static final int CAMERA_REQUEST = 1; 
    public static final int CONTACT_VIEW = 2; 

    @Override 
    public void onCreate(Bundle savedState) 
    { 
     super.onCreate(savedState); 
     // For CameraRequest you would most likely do 
     Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(cameraIntent, CAMERA_REQUEST); 

     // For ContactReqeuest you would most likely do 
     Intent contactIntent = new Intent(ACTION_VIEW, Uri.parse("content://contacts/people/1")); 
     startActivityForResult(contactIntent, CONTACT_VIEW); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (resultCode == Activity.RESULT_CANCELED) { 
      // code to handle cancelled state 
     } 
     else if (requestCode == CAMERA_REQUEST) { 
      // code to handle data from CAMERA_REQUEST 
     } 
     else if (requestCode == CONTACT_VIEW) { 
      // code to handle data from CONTACT_VIEW 
     } 
    } 

 

我希望這可以澄清參數的使用。

+0

我明白你的答案,但請允許我與你討論一些觀點。僅僅通過指定意圖的名稱來確定你從哪個活動和意圖中找回來的是不夠的。我的意思是,在「onActivityResult(..,..,intent data)」中,我們有參數「data」,它是一個意圖,是不是有辦法讓意圖的名字返回到「onActivityResult」? – user2121 2014-11-11 10:58:45

+0

您必須再次測試resultCode RESULT_CANCELED(在示例中有錯字),請參閱http://developer.android.com/reference/android/app/Activity.html#RESULT_CANCELED – 2015-06-29 19:50:42

+0

此請求代碼是否可以從字面上ANY整數?例如對象的哈希碼? – treesAreEverywhere 2015-12-01 19:42:45

1

使用超出範圍的整數將引發「java.lang.IllegalArgumentException:只能使用較低的16位for requestCode」異常。

所以記住,請求是不是任何正整數,但16位的整數,所以從0到65535

類似地,在validateRequestPermissionsRequestCode要求FragmentActivity到requestCode爲8位,所以在0和255.

4

Explanation is illustrated in picture.

public void onActivityResult(int requestCode, int resultCode, Intent data) 

app通過接收上述方法只從不同intents結果。那麼你如何理解回覆你的意圖?出於這個原因,在調用意圖之前,我們將一個自定義TAG /標籤稱爲requestCode。通過我們自己定義的requestCODE,我們可以檢查我們收到了哪個意圖的結果。

這裏在requestCode在這個例子中,我給出了Camera Intent的1001。你可以放任何你想要的號碼。 1200或2001或21.任何正整數範圍爲〜2^16。

查看所附圖片。

相關問題