El código de solicitud no se pasa automáticamente a la actividad iniciada porque no necesita (y no debería) conocer este valor. Solo necesita saber qué hacer y no desde dónde se inició.
Iniciar una actividad es realmente otra forma de llamar a un método. Cuando llamas a un método, recibes el resultado de forma sincrónica (justo allí donde hiciste la llamada). En este caso, solo está pasando la información que el método necesita para hacer su trabajo. No le está diciendo de dónde lo llamó.
Iniciar una actividad es el análogo asincrónico de llamar a un método, en cuyo caso recibe el resultado en el método especial onActivityResult (). En este método, necesita saber qué hacer con el resultado que acaba de recibir y tiene el código de solicitud para esto.
Para aclarar un poco por qué no es una buena idea pasar el código de solicitud como parámetro, considere la actividad de ejemplo que muestra un producto que puede comprar. En esta actividad hay dos botones etiquetados "Comprar" e "Iniciar sesión" (ya que actualmente no ha iniciado sesión). Al presionar "Iniciar sesión" se iniciará una actividad llamada "Iniciar sesión" que intentará iniciar sesión como usuario utilizando la información proporcionada. Al presionar "Comprar" primero se iniciará la misma actividad de "Iniciar sesión" y, si el inicio de sesión fue exitoso, comenzará la actividad de compra.
Ahora, el botón "Iniciar sesión" usa el código de solicitud 1 para iniciar la actividad de inicio de sesión, pero el botón "Comprar" no puede usar el mismo código de solicitud, ya que tendrá que hacer algo diferente si el inicio de sesión es exitoso. Entonces, el botón "Comprar" usa el código de solicitud 2.
En la actividad "Iniciar sesión", es posible que reciba dos códigos de solicitud diferentes según el lugar desde el que se haya llamado, pero deberá realizar el mismo procedimiento.
Entonces, si pasa el código de solicitud como parámetro, terminará con un código que necesita hacer lo mismo para un par de códigos de solicitud diferentes, como:
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
También terminará almacenando las constantes del código de solicitud en una ubicación central, por ejemplo, una clase llamada RequestCodes.
En resumen, el código de solicitud solo debe usarse para decidir qué hacer con el resultado recibido. De esta manera, terminará con un código más modular, más fácil de mantener y más fácil de extender.