Eu tenho quatro atividades, digamos A, B, C e D. Minha situação é A iniciará a atividade B por startActivityForResult.
startActivityForResult(new Intent(this,B.class),ONE);
Em outra situação, irei B com outra situação. gostar
startActivityForResult(new Intent(this,B.class),TWO);
Em B, preciso chamar C ou D dependendo de requestCode.
Ou seja, se UM precisa iniciar o C else D. Portanto, preciso saber como verificar o requestCode na atividade filho (B aqui).
Em outras palavras, desejo obter o código de solicitação com o qual a Atividade B foi iniciada.
O código de solicitação não é passado para a atividade iniciada automaticamente porque ela não precisa (e não deveria) saber esse valor. Ele só precisa saber o que fazer e não de onde começou.
Iniciar uma atividade é apenas outra forma de chamar um método. Quando você chama um método, você recebe o resultado de forma síncrona (bem ali onde você fez a chamada). Nesse caso, você está apenas passando as informações de que o método precisa para fazer seu trabalho. Você não está dizendo de onde você fez a chamada.
Iniciar uma atividade é o análogo assíncrono de chamar um método, caso em que você recebe o resultado no método especial onActivityResult (). Neste método, você precisa saber o que fazer com o resultado que acabou de receber e você tem o código de solicitação para isso.
Para deixar um pouco mais claro por que não é uma boa ideia passar o código da solicitação como um parâmetro, considere a atividade de exemplo que mostra um produto que você pode comprar. Nesta atividade, existem dois botões rotulados "Comprar" e "Login" (já que você não está logado no momento). Pressionar "Login" iniciará uma atividade chamada "Login", que tentará fazer o login do usuário usando as informações fornecidas. Pressionar "Comprar" iniciará primeiro a mesma atividade de "Login" e, se o login for bem-sucedido, inicie a atividade de compra.
Agora, o botão "Login" usa o código de solicitação 1 para iniciar a atividade de login, mas o botão "Comprar" não pode usar o mesmo código de solicitação, pois terá que fazer algo diferente se o login for bem-sucedido. Portanto, o botão "Comprar" usa o código de solicitação 2.
Na atividade "Login", você pode receber dois códigos de solicitação diferentes, dependendo de onde foi chamada, mas você precisará fazer exatamente o mesmo procedimento.
Portanto, se você passar o código da solicitação como um parâmetro, acabará com o código que precisa fazer o mesmo para alguns códigos de solicitação diferentes, como:
if (requestCode == LOGIN || requestCode == BUY) { // ... } else ...
Você também terminará armazenando as constantes do código de solicitação em um local central, por exemplo, uma classe chamada RequestCodes.
Em suma, o código de solicitação deve ser usado apenas para decidir o que fazer com o resultado recebido. Dessa forma, você terá um código mais modular, mais fácil de manter e de estender.
fonte
Acabei usando a ação Intent personalizada para passar esse tipo de informação para a atividade de inicialização.
protected static final String ACTION_DO_C = "do_c"; protected static final String ACTION_DO_D = "do_d";
Então você diria:
final Intent intent = new Intent(this,B.class) intent.setAction(ACTION_DO_C); startActivityForResult(intent,ONE);
E em Activity
B
você consegue a ação facilmente:getIntent().getAction();
fonte
Você pode usar getCallingActivity () para obter a atividade que iniciou a atividade atual e que receberá o valor do resultado com o código de resposta no final.
fonte