2012-02-13 39 views
26

Tôi tự hỏi nếu tôi hiểu các khái niệm về requestCode correectly. số nguyên này là gì và liệu nó có vấn đề gì integer tôi đặt nó vào trong:Ý nghĩa của requestCode trong startActivityForResult

private static int CAMERA_REQUEST = ???; 

Cảm ơn bạn

+4

Đây là tài liệu dành cho nhà phát triển trên đó: http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29 – bschultz

Trả lời

8

Nhìn ví dụ của tôi here. Số nguyên bạn phải đặt có thể là số nguyên dương. Chỉ không làm cho họ giống nhau, bạn không muốn trộn chúng, phải không? Và đừng đưa chúng về 0 - nó không trả về kết quả, IMHO, tôi có những hành vi lạ với 0. Đối với âm bản, cũng đừng dùng chúng, chúng được dành riêng cho các kết quả âm trong các hàm callActivities khác.

+2

Cảm ơn bạn, nhưng tôi vẫn không không biết mục đích của nó. Nó chỉ là một định danh và tôi có thể chọn nó một cách ngẫu nhiên? – user1178988

+2

có. Chính bạn, người sẽ đọc mã yêu cầu, chỉ * viết vào * và * so sánh với * cùng giá trị. – Gangnus

47

Mã yêu cầu giúp bạn xác định bạn đã trở lại mục đích nào. Ví dụ: hãy tưởng tượng Hoạt động A của bạn (Hoạt động chính) có thể gọi Hoạt động B (Yêu cầu máy ảnh), Hoạt động C (Ghi âm), Hoạt động D (Chọn một liên hệ).

Bất cứ khi nào các hoạt động B, C hoặc D kết thúc và cần chuyển dữ liệu trở lại A, bây giờ bạn cần phải xác định trong onActivityResult của mình từ Hoạt động bạn quay trở lại và đặt logic xử lý của bạn cho phù hợp.

 


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

 

Tôi hy vọng điều này sẽ làm rõ việc sử dụng tham số.

+0

Tôi hiểu bạn trả lời, nhưng hãy cho phép tôi thảo luận một số điểm với bạn. Không đủ để xác định từ hoạt động và ý định bạn quay lại bằng cách chỉ định tên của ý định. Ý tôi là, trong "onActivityResult (.., .., intent data)" chúng ta có tham số "data" là một ý định, không có cách nào để có được tên của ý định quay trở lại "onActivityResult"? – user2121

+0

Bạn phải kiểm tra lại resultCode RESULT_CANCELED (có lỗi chính tả trong ví dụ), xem http://developer.android.com/reference/android/app/Activity.html#RESULT_CANCELED –

+0

Mã yêu cầu này có thể là số nguyên theo nghĩa đen không? ví dụ. một hashcode của một đối tượng? – treesAreEverywhere

1

Sử dụng số nguyên ngoài phạm vi sẽ tăng "ngoại lệ java.lang.IllegalArgumentException: Chỉ có thể sử dụng 16 bit cho requestCode" ngoại lệ.

Vì vậy hãy ghi nhớ rằng yêu cầu không chỉ là bất kỳ số nguyên dương nhưng một số nguyên 16 bit, vì vậy từ 0 đến 65535.

Tương tự, validateRequestPermissionsRequestCode trong FragmentActivity đòi hỏi requestCode là 8 bit, vì vậy giữa 0 và 255.

4

Explanation is illustrated in picture.

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

app nhận kết quả từ khác nhau intents qua trên phương pháp duy nhất. Vậy làm thế nào bạn sẽ hiểu ý định nào đã trả lời bạn? Vì lý do đó, trước khi gọi các ý định, chúng tôi đặt một TAG/Nhãn tự định nghĩa được gọi là requestCode. Bằng cách xác định requestCODE của chúng tôi, chúng tôi có thể kiểm tra kết quả của ý định mà chúng tôi đã nhận được.

Ở đây trong requestCode trong ví dụ tôi đã đưa ra 1001 cho Mục đích của máy ảnh. Bạn có thể đặt bất kỳ số nào bạn muốn. 1200 hoặc 2001 hoặc 21. Bất kỳ số nguyên dương nào nằm trong khoảng ~ 2^16.

Xem ảnh được đính kèm.