2012-02-13 59 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。

查看所附图片。

相关问题