2012-02-13 31 views
26

? Me pregunto si estoy entendiendo los conceptos de requestCode de forma correcta. ¿Qué es este entero y lo hace para importar entero lo fijo en el:¿Cuál es el significado de requestCode en startActivityForResult

private static int CAMERA_REQUEST = ???; 

Gracias

+4

Aquí están los documentos de desarrollo: http://developer.android.com/reference/android/app/Activity.html#startActivityForResult%28android.content.Intent,%20int%29 – bschultz

Respuesta

8

Mira mi ejemplo here. El número entero que tienes que establecer puede ser cualquiera positivo. Solo que no los hagas iguales, no quieres mezclarlos, ¿verdad? Y no los pongas en 0: regresa sin resultado, en mi humilde opinión, tuve comportamientos extraños con 0. En cuanto a los negativos, no los uses, también, están reservados para resultados negativos en otras funciones de callActivities.

+2

Gracias, pero sigo sin donar No sé el propósito de eso. ¿Es solo un identificador y puedo seleccionarlo al azar? – user1178988

+2

sí. Eres tú quien leerá el código de solicitud, solo * escriba en * y * compare con * los mismos valores. – Gangnus

47

El requestCode le ayuda a identificar desde qué intención regresó. Por ejemplo, imagine que su Actividad A (Actividad principal) podría llamar Actividad B (Solicitud de cámara), Actividad C (Grabación de audio), Actividad D (Seleccionar un contacto).

Cuando las actividades posteriores llamadas B, C o D finalizan y necesitan pasar datos a A, ahora necesita identificar en su onActivityResult de qué actividad está volviendo y poner su lógica de manejo en consecuencia.

 


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

 

Espero que esto aclare el uso del parámetro.

+0

Entiendo que responda, pero permítame hablar de algunos puntos con usted. ¿No es suficiente identificar de qué actividad e intención regresó al especificar el nombre del intento? Lo que quiero decir es que en el "onActivityResult (..., ..., datos de intención)" tenemos el parámetro "data" que es una intención, ¿no hay alguna forma de obtener el nombre de la intención devuelta a "onActivityResult"? – user2121

+0

Debe probar resultCode agains RESULT_CANCELED (hay error tipográfico en el ejemplo), consulte http://developer.android.com/reference/android/app/Activity.html#RESULT_CANCELED –

+0

¿Puede este código de solicitud ser literalmente CUALQUIER número entero? p.ej. un hashcode de un objeto? – treesAreEverywhere

1

El uso de un número entero fuera del rango provocará una excepción "java.lang.IllegalArgumentException: Solo se puede usar la parte inferior de 16 bits para requestCode".

Así que tener en cuenta que la solicitud no es cualquier número entero positivo, pero un número entero de 16 bits, por lo que desde 0 a 65535.

Del mismo modo, en validateRequestPermissionsRequestCode FragmentActivity requiere requestCode a ser de 8 bits, por lo que entre 0 y 255.

4

Explanation is illustrated in picture.

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

app recibe los resultados de las diferentes intents vía anterior sólo método. Entonces, ¿cómo entenderás qué intento te ha respondido? Por esa razón, antes de invocar los intentos, colocamos un ETIQUETA/Etiqueta auto definida que se llama requestCode. Por nuestra propia definición requestCODE podemos verificar qué resultado de intención hemos recibido.

Aquí en requestCode en el ejemplo que he dado 1001 para Camera Intent. Puedes poner cualquiera de tu número deseado. 1200 o 2001 o 21. Cualquier entero positivo de ~ 2^16.

Ver la imagen adjunta.

Cuestiones relacionadas