studio intents intent example desde change boton activity action_send abrir android android-intent android-manifest android-activity

android - intents - Reanudar la actividad principal en lugar de comenzar la actividad del iniciador



intent filter android manifest (6)

Tengo dos actividades en Mi aplicación, una de ellas como iniciador y la otra como una llamada explícita desde la primera.

Aquí Mi problema es cuando vuelvo a la pantalla de inicio presionando la tecla de inicio de la segunda actividad y la aplicación, nuevamente la primera actividad se inicia aunque la segunda actividad ya esté en segundo plano.

La primera Actividad está escrita para descargar los activos necesarios para que la aplicación funcione, una vez que se descargan los activos, desencadena la segunda actividad y las llamadas terminan por sí mismas.

Debajo está mi manifiesto de la aplicación.

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" /> <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <! Download the Required Assets if not found on SD Card --> <activity android:name=".ContentDownload" android:screenOrientation="landscape" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|locale" android:launchMode="singleTask" android:alwaysRetainTaskState="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name=".ActualAppActivity" android:screenOrientation="landscape" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|locale" android:launchMode="singleTask" android:alwaysRetainTaskState="true" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <supports-screens android:smallScreens="false" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"/>

¿Puede alguien guiarme sobre cómo hacer que la segunda actividad gane el control directamente en lugar de pasar por la primera otra vez si se llama al iniciador y está en segundo plano?

A continuación está mi método de devolución de llamada onResult.

public void onResult(String assetPath, int result) { if(result == RESULT_OK) { startActivity(new Intent(this, ActualAppActivity.class)); activity.destroyDownloadActvity(); finish(); } else { finish(); java.lang.System.exit(0); } activity.destroyDownloadActvity(); activity = null; }


Intente utilizar el siguiente código en el método onCreate de la actividad que se especifica como actividad del iniciador en el Manifiesto, es decir, la actividad ContentDownload del código original publicado en la pregunta:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { finish(); return; }

Esto terminará su actividad de iniciador antes de que se muestre al detectar que ya hay una tarea ejecutándose y, en su lugar, su aplicación debería reanudarse hasta la última actividad visible.

Consulte esta página en la documentación de Android sobre Manifiesto de Android launchModes: http://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode


No llame a finish (). FLAG_ACTIVITY_CLEAR_TASK pasar al Intento la bandera FLAG_ACTIVITY_CLEAR_TASK y FLAG_ACTIVITY_NEW_TASK.

Intent intent = new Intent(this, ActualAppActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);


Sin ver tu código, creo que quieres algo así como esta respuesta:

Android finaliza la actividad y comienza otra

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); establecer intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); y también deberá finish() su actividad de iniciador también.


Tienes ambas actividades definidas con launchMode="singleTask" . Esta es la raíz de tu problema. Eliminar eso


Utilizo el siguiente código en las actividades de LAUNCHER de mis aplicaciones para evitar que la aplicación vuelva a iniciarse cuando todavía está activa en el fondo y se toca el ícono.

@Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!isTaskRoot()) { finish(); return; } // Rest of your onCreate stuff goes here }

Esto acaba la Actividad de LAUNCHER y reanuda el último usado.


lo que puede hacer es almacenar una cadena en el almacenamiento persistente que determina si los activos se han cargado antes o no.

Luego, en la actividad principal, puede verificar si los activos se han cargado o no y luego comenzar la actividad requerida.

if(assets_already_downloaded) second_activity(); else download_asset_activity();