startActivityForResult中requestCode的含义是什么

时间:2012-02-13 21:16:43

标签: android

我想知道我是否正确理解requestCode的概念。 这个整数是什么,在

中设置的整数是否重要
private static int CAMERA_REQUEST = ???;

谢谢

4 个答案:

答案 0 :(得分:65)

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


我希望这可以澄清参数的使用。

答案 1 :(得分:9)

看看我的例子here。您必须设置的整数可以是任何一个正数。只是不要让它们一样,你不想混它们,是吗?并且不要将它们设置为0 - 它返回没有结果,恕我直言,我有0的奇怪行为。至于否定,也不要使用它们,它们被保留用于其他callActivities函数中的否定结果。

答案 2 :(得分:6)

Explanation is illustrated in picture.

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

app仅通过上述方法接收来自不同intents的结果。那么您如何理解哪些意图回复了您?出于这个原因,在调用意图之前,我们放置了一个名为requestCode的自定义TAG / Label。通过我们自己定义的requestCODE,我们可以检查我们收到的意图结果。

在示例中的requestCode中,我为Camera Intent提供了1001。您可以输入任何所需的号码。 1200或2001或21.任何正整数范围为~2 ^ 16。

见附图。

答案 3 :(得分:3)

使用超出范围的整数将引发" java.lang.IllegalArgumentException:对于requestCode只能使用低16位"异常。

所以请记住,请求不只是任何正整数,而是16位的整数,所以从0到65535。

类似地,FragmentActivity中的validateRequestPermissionsRequestCode要求requestCode为8位,因此介于0和255之间。