Estou iniciando atividades da atividade principal do meu aplicativo usando a chamada startActivityForResult(intent, ACTIVITY_TYPE)
, e todas estão funcionando, exceto uma.
Este, quando chamado, inicia a atividade conforme desejado, mas no log eu posso ver que onActivityResult()
está sendo acionado imediatamente. A atividade aparece, mas RESULT_CANCELED
é retornada imediatamente para onActivityResult()
.
Interajo com a atividade, pressiono um botão que chama finish()
e onActivityResult()
não é chamado dessa vez (porque aparentemente um resultado já foi retornado).
Isso faz sentido para alguém? Alguém já viu esse comportamento antes?
fonte
singleTop
Parece bom para mim,singleTask
no entanto estava causando esta questão e, portanto,singleInstance
com certeza gostaria de fazer tambémAlém disso, verifique se a intenção não possui o
Intent.FLAG_ACTIVITY_NEW_TASK
conjunto.Dos documentos :
fonte
Intent.FLAG_ACTIVITY_NEW_TASK
?Já vi esse comportamento antes, verifique se a atividade de destino (essa atividade especial) não está
singleInstance
no arquivo AndroidManifest. Se a atividade forsingleInstance
, ela retornaráRESULT_CANCELED
antes do lançamento!fonte
Eu também gostaria de acrescentar que você poderia chamar um aplicativo externo com:
Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
O que criaria uma intenção
Intent.FLAG_ACTIVITY_NEW_TASK
adicionada por padrão, então chame:in.setFlags(0);
O que limpará esse sinalizador e você poderá prosseguir para:
startActivityForResult(in, action);
A razão pela qual estou fazendo isso é que tenho um aplicativo utilitário com funcionalidade comum entre alguns outros aplicativos e posso manter as alterações de código em um local, em vez de me preocupar com várias atualizações.
fonte
startActivityForResult()
não funciona com umasingleInstance
ousingleTask
atividade na versão pré-pirulito de Android. Desde o Android 5, ele funciona (veja esta resposta para mais detalhes).fonte
Também é acionado se você tiver a
FLAG_ACTIVITY_NEW_TASK
sua intenção.fonte
Meu problema estava com a atividade de chamada. Sua declaração no AndroidManifest tinha a seguinte propriedade:
Alterou para "false" e agora funciona bem.
fonte
O Android 4.4 tem um pequeno problema em aguardar o retorno no final do encerramento do atividade. Para resolver esse comportamento, é importante definir:
TaskAffinity = "[SAME STRING]"
)launchmode=singleTop,
launchIntent.SetFlags(0); // for reset default Intent flags if you launch from package manager
Esta solução funciona com todas as versões do Android
Veja isto para taskAffinity: https://asyoulook.com/computers%20&%20internet/android-onactivityresult-being-called-instantly/1004072
fonte
Além disso, verifique se android: noHistory = "true" na atividade do Manifest, se sim, não funcionará.
fonte
Para
ActivityGroup
ou paraTabHost
outros, talvez oxxxActivity
seja umsubActivity
dos seus pais. Então ostartActivityForResult
não pode funcionar, mas o pai pode obter o resultado.ligar
getParent().startActivityForResult()
da sua subatividadeseu pai (o
ActivityGroup
) poderá lidar com oonActivityResult
. Então, eu criei uma subclasseActivityGroup
e lidei com issoonActivityResult
.Você pode redirecionar o resultado de volta para a subatividade, se necessário. Basta obter a atividade atual por
getLocalActivityManager().getCurrentActivity()
. Minhas sub-atividades são herdadas de uma atividade personalizada, então adicionei umahandleActivityResult(requestCode, resultCode, data)
nessa subclasse para aActivityGroup
chamada.exemplo: http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
fonte
onActivityResult()
também passaráRESULT_CANCELED
comoresultCode
se você digitar incorretamente o nome do pacote ou da classe no arquivo de manifesto.fonte
No conjunto de manifestos do Android
android:launchMode="singleTop"
para a atividade que você deseja abrir com o resultado e ao abrir o sinalizador de conjunto de atividadesintent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
fonte
Se você definiu
android:noHistory="true"
a atividade no seu AndroidManifest.xml, isso causará o mesmo problema aqui.fonte