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

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

private static int CAMERA_REQUEST = ???; 

спасибо

Solutions Collecting From Web of "В чем смысл requestCode в startActivityForResult"

Код запроса помогает вам определить, из какого намерения вы вернулись. Например, представьте, что ваша активность A (основная активность) может вызвать Activity B (Запрос камеры), Activity C (Аудиозапись), Activity 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 == 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 } }
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 == 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 – он возвращается без результата, ИМХО, у меня было странное поведение с 0. Что касается негативов, не используйте их тоже, они зарезервированы для отрицательных результатов в других функциях callActivities.

Объяснение проиллюстрировано на рисунке.

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

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

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

См. Прилагаемый рисунок.

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

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

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