Il codice della richiesta non viene passato automaticamente all'attività avviata perché non è necessario (e non dovrebbe) conoscere questo valore. Ha solo bisogno di sapere cosa fare e non da dove è stato avviato.
Avviare un'attività è in realtà solo un'altra forma di chiamare un metodo. Quando chiami un metodo, ricevi il risultato in modo sincrono (proprio lì dove hai effettuato la chiamata). In questo caso stai solo trasmettendo le informazioni di cui il metodo ha bisogno per fare il suo lavoro. Non gli stai dicendo da dove l'hai chiamato.
L'avvio di un'attività è l'analogo asincrono della chiamata di un metodo, nel qual caso si riceve il risultato nel metodo speciale onActivityResult (). In questo metodo, devi sapere cosa fare con il risultato che hai appena ricevuto e hai il codice di richiesta per questo.
Per rendere un po 'più chiaro il motivo per cui non è una buona idea passare il codice della richiesta come parametro, considera l'attività di esempio che mostra un prodotto che puoi acquistare. In questa attività ci sono due pulsanti etichettati "Acquista" e "Accedi" (poiché attualmente non sei loggato). Premendo "Login" inizierà un'attività denominata "Login" che tenterà di accedere all'utente utilizzando le informazioni fornite. Premendo "Acquista" inizierà prima la stessa attività di "Login" e se il login è andato a buon fine, inizierà l'attività di acquisto.
Ora, il pulsante "Accedi" utilizza il codice di richiesta 1 per avviare l'attività di accesso, ma il pulsante "Acquista" non può utilizzare lo stesso codice di richiesta in quanto dovrà fare qualcosa di diverso se il login ha successo. Quindi, il pulsante "Acquista" utilizza il codice di richiesta 2.
Nell'attività "Login" potresti ricevere due diversi codici di richiesta a seconda di dove è stato chiamato, ma dovrai eseguire la stessa procedura.
Quindi, se passi il codice della richiesta come parametro, ti ritroverai con il codice che deve fare le stesse cose per un paio di codici di richiesta diversi, come:
if (requestCode == LOGIN || requestCode == BUY) {
} else ...
Finirai anche per memorizzare le costanti del codice di richiesta in una posizione centrale, ad esempio una classe chiamata RequestCodes.
In breve, il codice di richiesta dovrebbe essere utilizzato solo per decidere cosa fare con il risultato ricevuto. In questo modo ti ritroverai con un codice più modulare, più facile da mantenere e più facile da estendere.