vez solo siempre revertir restablecer reproductor quitar programa predeterminado predeterminadas para este esta cómo con como cambiar archivos archivo aplicaciones aplicacion abrir android android-manifest

android - restablecer - cómo revertir siempre o solo esta vez



¿Cómo elijo dinámicamente qué actividad lanzar cuando abro una aplicación? (3)

Estoy escribiendo una aplicación que requiere que inicie sesión en un servicio antes de usarlo. Desde mi comprensión de Android hasta el momento, debes elegir qué actividad iniciar cuando abres desde el iniciador en el manifiesto. No sé qué actividad quiero iniciar en tiempo de compilación. Quiero que el usuario haga clic en el ícono, luego verifico y veo si están conectados, y luego decido basado en eso, ya sea para iniciar la actividad de inicio de sesión o la actividad principal de la aplicación. ¿Hay alguna forma de hacer esto?


Hay otra forma de hacerlo utilizando activity-alias .

  1. En el Manifiesto:

    <activity android:name=".LoginActivity" android:icon="@drawable/ic_launcher_main" android:label="Login" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:icon="@drawable/ic_launcher_main" android:label="MainActivity" > </activity> <activity-alias android:name=".AliasActivity" android:label="AliasActivity" android:enabled="false" android:targetActivity=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias>

    2. En algún lugar de la actividad de inicio de sesión:

    String s = getApplicationContext().getPackageName(); ComponentName cm = new ComponentName(s, s+".AliasActivity"); ComponentName cm2 = new ComponentName(s, s+".Login"); PackageManager pm = this.getPackageManager(); pm.setComponentEnabledSetting(cm, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 1); pm.setComponentEnabledSetting(cm2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);

después de eso, la aplicación se eliminará una vez y la próxima vez que inicie la aplicación, MainActivity sería el iniciador.


Justo como lo dijo @auval, pruebo el código de la siguiente manera y ¡lo hago bien! Al principio, el archivo AndroidManifest.xml se ve así:

<activity android:name=".LauncherActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".MainActivity"> </activity> <activity-alias android:name=".AliasActivity" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity-alias>

En segundo lugar, puede poner estos códigos en algún lugar de MainActivity.class:

private void changeLauncher() { String s = getApplicationContext().getPackageName(); ComponentName cm = new ComponentName(s, s + ".AliasActivity"); ComponentName cm2 = new ComponentName(s, s + ".LauncherActivity"); PackageManager pm = this.getPackageManager(); pm.setComponentEnabledSetting(cm, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP ); pm.setComponentEnabledSetting(cm2, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); }

Ahora, cuando inicie la aplicación por primera vez, se lanzará LauncherActivity y cuando salga de la aplicación, vuelva a ejecutarla, se iniciará MainActivity.


No, ya que tiene que ejecutar un código, no hay forma de declararlo (en manifiesto) para decir esto. Tiene que iniciar una actividad (establecer en manifiesto), luego hacer que esta actividad decida en función de si el usuario ha iniciado sesión o no qué segunda actividad para iniciar a través de la intención:

final Class<? extends Activity> activityClass; if(userIsLoggedOn()) activityClass = LoggedOnActivity.class; else activityClass = LogInActivity.class; Intent newActivity = new Intent(context, activityClass); context.startActivity(newActivity);