What is the meaning of requestCode in startActivityForResult

Android

Android Problem Overview


I'm wondering if I am understanding the concepts of requestCode correectly. What is this integer for and does it matter what integer I set it to in:

private static int CAMERA_REQUEST = ???;

Thank you

Android Solutions


Solution 1 - Android

The requestCode helps you to identify from which Intent you came back. For example, imagine your Activity A (Main Activity) could call Activity B (Camera Request), Activity C (Audio Recording), Activity D (Select a Contact).

Whenever the subsequently called activities B, C or D finish and need to pass data back to A, now you need to identify in your onActivityResult from which Activity you are returning from and put your handling logic accordingly.



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





I hope this clarifies the use of the parameter.

Solution 2 - Android

Look my example here. The integer you have to set can be any one positive. Only do not make them the same, you don't want to mix them, do you? And don't put them to 0 - it is returning without result, IMHO, I had strange behaviours with 0. As for negatives, don't use them, too, they are reserved for negative results in other callActivities functions.

Solution 3 - Android

Explanation is illustrated in picture.

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

app receives results from the different intents via above method only. So how will you understand which intent had replied to you? For that reason, before invoking the intents we put a self defined TAG/Label which is called requestCode. By our own defined requestCODE we can check which intent's result we have received.

Here in requestCode in the example I have given 1001 for Camera Intent. You can put any of your desired number. 1200 or 2001 or 21. Any Positive integers ranging to ~2^16.

See the picture attached.

Solution 4 - Android

Using an integer out of the range will raise a "java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode" exception.

So keep in mind that request is not just any positive integer but an integer of 16 bits, so from 0 to 65535.

Similarly, validateRequestPermissionsRequestCode in FragmentActivity requires requestCode to be of 8 bits, so between 0 and 255.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1178988View Question on Stackoverflow
Solution 1 - AndroidBibek ShresthaView Answer on Stackoverflow
Solution 2 - AndroidGangnusView Answer on Stackoverflow
Solution 3 - Androidkazi farhan AhmedView Answer on Stackoverflow
Solution 4 - AndroidDaniele D.View Answer on Stackoverflow