Как динамически выбрать действие для запуска при открытии приложения
Я пишу приложение, которое требует, чтобы вы вошли в службу, прежде чем использовать его. Из моего понимания android до сих пор, вы должны выбрать, какие действия запускать при открытии из пусковой установки в манифесте. Я не знаю, какое действие я хочу запустить во время компиляции. Я хочу, чтобы пользователь щелкнул значок, затем я проверяю и вижу, вошли ли они в систему, а затем решите на основе этого, следует ли запускать действие входа в систему или основное действие приложения. Есть ли способ сделать это?
3 ответа:
нет, так как вы должны запустить некоторый код, нет никакого способа декларативно (в манифесте) сказать это. Вы должны запустить действие (установить в манифесте), а затем это действие решить на основе того, вошел ли пользователь в систему или нет, какое второе действие запустить через Intent:
final Class<? extends Activity> activityClass; if(userIsLoggedOn()) activityClass = LoggedOnActivity.class; else activityClass = LogInActivity.class; Intent newActivity = new Intent(context, activityClass); context.startActivity(newActivity);
есть еще один способ сделать это с помощью activity-alias.
в Манифесте :
<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.Где-то в активности входа:
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);
после этого приложение будет убито один раз и в следующий раз, когда вы запустите приложение, основной активностью будет пусковая установка.
Так же, как выше @auval сказал, я тестирую код, как показано ниже, и это хорошо! Во-первых ,AndroidManifest.XML-файл выглядит так:
<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>
во-вторых,вы можете поместить этот код где-то в MainActivity.класс:
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); }
теперь ,когда вы впервые запустите приложение ,LauncherActivity будет запущен,и когда вы выйдете из приложения, запустите приложение снова, MainActivity будет запущен.