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_CANCELEDse 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

singleTopme parece bien,singleTasksin embargo , estaba causando este problema y, porsingleInstancelo tanto , definitivamente también lo haríaAdemás, asegúrese de que la intención no tenga el
Intent.FLAG_ACTIVITY_NEW_TASKconjunto.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é
singleInstanceen el archivo AndroidManifest. Si la actividad essingleInstance, ¡volveráRESULT_CANCELEDantes 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_TASKagregado 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 unasingleInstanceosingleTaskactividad 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_TASKen 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 managerEsta 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
ActivityGroupoTabHosty otros, tal vez elxxxActivityes unosubActivityde sus padres. Entonces elstartActivityForResultno 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 deActivityGroupy 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 paraActivityGroupque llame.ejemplo: http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
fuente
onActivityResult()también pasaráRESULT_CANCELEDcomoresultCodesi 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