Подтвердить что ты не робот

В чем смысл requestCode в startActivityForResult

Мне интересно, правильно ли я понимаю понятия requestCode. Что это за целое число и имеет значение, какое целое я установил в:

private static int CAMERA_REQUEST = ???;

Спасибо

4b9b3361

Ответ 1

Код запроса помогает вам определить, из какого намерения вы вернулись. Например, представьте, что ваша активность A (основная активность) может вызвать действие B (запрос камеры), активность C (аудиозапись), активность D (выбрать контакт).

Всякий раз, когда последующие действия B, C или D заканчиваются и им необходимо передать данные обратно в A, теперь вам нужно идентифицировать в своем onActivityResult, из которого вы возвращаетесь, и соответственно поместите свою логику обработки.



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


Надеюсь, это объяснит использование параметра.

Ответ 2

Посмотрите мой пример здесь. Целое число, которое вы должны установить, может быть любым положительным. Только не делайте их одинаковыми, вы не хотите их смешивать, не так ли? И не ставьте их в 0 - он возвращается без результата, ИМХО, у меня было странное поведение с 0. Что касается негативов, не используйте их тоже, они зарезервированы для отрицательных результатов в других функциях callActivities.

Ответ 3

Explanation is illustrated in picture.

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

app получает результаты только от intents только вышеописанного метода. Итак, как вы поймете, какое намерение ответили вам? По этой причине, прежде чем вызывать намерения, мы помещаем самоопределяемую TAG/Label, которая называется requestCode. По нашему собственному определению requestCode мы можем проверить, какой результат мы получили.

Здесь в requestCode в примере я дал 1001 для Camera Intent. Вы можете поместить любой желаемый номер. 1200 или 2001 или 21. Любые положительные целые числа до ~ 2 ^ 16.

См. прикрепленное изображение.

Ответ 4

Использование целого из диапазона приведет к возникновению исключения "java.lang.IllegalArgumentException: может использовать только более короткие 16 бит для исключения запроса".

Поэтому имейте в виду, что запрос - это не просто любое положительное целое число, а целое число из 16 бит, поэтому от 0 до 65535.

Аналогично, validateRequestPermissionsRequestCode в FragmentActivity требует, чтобы requestCode имел 8 бит, поэтому между 0 и 255.