Estoy iniciando actividades desde la actividad principal en mi aplicación usando la llamada startActivityForResult(intent, ACTIVITY_TYPE)
, y todas están funcionando menos una.
Este, cuando se llama, inicia la actividad como se desea, pero en el registro puedo ver que onActivityResult()
se está activando de inmediato. La actividad aparece pero RESULT_CANCELED
se vuelve inmediatamente a onActivityResult()
.
Luego interactúo con la actividad, presiono un botón que llama finish()
y onActivityResult()
no se llama esta vez (porque aparentemente ya se ha devuelto un resultado).
¿Esto tiene sentido para alguien? ¿Alguien ha visto este comportamiento antes?
fuente
singleTop
me parece bien,singleTask
sin embargo , estaba causando este problema y, porsingleInstance
lo tanto , definitivamente también lo haríaAdemás, asegúrese de que la intención no tenga el
Intent.FLAG_ACTIVITY_NEW_TASK
conjunto.De los documentos :
fuente
Intent.FLAG_ACTIVITY_NEW_TASK
?He visto este comportamiento antes, asegúrese de que su actividad de destino (esa actividad especial) no esté
singleInstance
en el archivo AndroidManifest. Si la actividad essingleInstance
, ¡volveráRESULT_CANCELED
antes de iniciarse!fuente
También me gustaría agregar que podría llamar a una aplicación externa con:
Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
lo que crearía una intención con
Intent.FLAG_ACTIVITY_NEW_TASK
agregado por defecto, así que llame:in.setFlags(0);
lo que borrará esa bandera, y luego puede proceder a:
startActivityForResult(in, action);
La razón por la que hago esto es que tengo una aplicación de utilidad que tiene una funcionalidad común entre algunas otras aplicaciones y puedo mantener los cambios de código en una ubicación en lugar de preocuparme por las actualizaciones múltiples.
fuente
startActivityForResult()
no funciona con unasingleInstance
osingleTask
actividad en la versión pre-lollipop de Android. Desde Android 5 funciona (vea esta respuesta para más detalles).fuente
También se dispara si tienes
FLAG_ACTIVITY_NEW_TASK
en tu intento.fuente
Mi problema fue con la actividad de llamadas. Su declaración en el AndroidManifest tenía la siguiente propiedad:
Lo cambió a "falso" y ahora funciona bien.
fuente
Android 4.4 tiene un pequeño problema al esperar el regreso al final del cierre de la actividad. Para resolver este comportamiento, es importante establecer:
TaskAffinity = "[SAME STRING]"
)launchmode=singleTop,
launchIntent.SetFlags(0); // for reset default Intent flags if you launch from package manager
Esta solución funciona con todas las versiones de Android
Vea esto para taskAffinity: https://asyoulook.com/computers%20&%20internet/android-onactivityresult-being-called-instantly/1004072
fuente
Además, verifique si android: noHistory = "true" en la actividad en Manifiesto, en caso afirmativo, no funcionará.
fuente
Para
ActivityGroup
oTabHost
y otros, tal vez elxxxActivity
es unosubActivity
de sus padres. Entonces elstartActivityForResult
no puede funcionar pero el padre puede obtener el resultado.llamada
getParent().startActivityForResult()
desde su sub-actividadtu padre (el
ActivityGroup
) podrá manejar elonActivityResult
. Así que creé una subclase deActivityGroup
y manejé estoonActivityResult
.Puede redirigir ese resultado a la sub-actividad si es necesario. Simplemente obtenga la actividad actual por
getLocalActivityManager().getCurrentActivity()
. Mis sub-actividades heredan de una actividad personalizada, así que agregué unahandleActivityResult(requestCode, resultCode, data)
en esa subclase paraActivityGroup
que llame.ejemplo: http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
fuente
onActivityResult()
también pasaráRESULT_CANCELED
comoresultCode
si escribe mal el paquete o el nombre de la clase en el archivo de manifiesto.fuente
En el Manifiesto de Android configurado
android:launchMode="singleTop"
para la actividad que desea abrir con el resultado y al abrir el indicador de conjunto de actividadintent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
fuente
Si definió
android:noHistory="true"
en la actividad en su AndroidManifest.xml, causará el mismo problema aquí.fuente