Intereting Posts
RecyclerView получает сбой при использовании notifyItemChanged из обработчика с использованием Runnable ADB нажимает несколько файлов с одним расширением с одной командой Eclipse с плагином Android – Заблокировано при «вычислении требований и зависимостей» Создайте RecyclerView с горизонтальной и вертикальной прокруткой Статические фрагменты и динамические фрагменты Mapbox Android SDK – Перетаскиваемый маркер Как получить информацию о профиле пользователя из Facebook API Android Эмулятор Visual Studio для Android. Для запуска эмулируемых устройств необходим внутренний виртуальный сетевой коммутатор Получить название видео на YouTube Как вы используете речь в реальном времени Android для текста? Android: Пользовательский вид на основе макета: как? Мониторинг всех событий Android-устройств удаленно Как получить растровое изображение холста, которое я получаю в onDraw? Создание анимации в ImageView при изменении ресурса изображения Ошибка PendingIntent (должно быть одно или несколько из следующих: PendingIntent.FLAG_ONE_SHOT … ..)

Как я могу динамически выбирать, какую активность запускать при открытии приложения?

Я пишу приложение, которое требует, чтобы вы вошли в службу перед ее использованием. Из моего понимания андроида до сих пор вам нужно выбрать, какую деятельность запускать, когда вы открываете из запуска в манифесте. Я не знаю, какую деятельность я хочу запустить во время компиляции. Я хочу, чтобы пользователь щелкнул значок, затем я проверю и посмотрю, если они вошли в систему, а затем решите на основе этого, следует ли запускать активность входа или основное действие приложения. Есть ли способ сделать это?

Solutions Collecting From Web of "Как я могу динамически выбирать, какую активность запускать при открытии приложения?"

Нет, поскольку вам нужно запустить какой-то код, нет никакого способа декларативно (в манифесте) сказать это. Вам необходимо запустить мероприятие (установленное в манифесте), а затем принять это действие на основании того, вошел ли пользователь в систему или нет, какую вторую активность запускать через Intent:

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

Существует другой способ сделать это, используя псевдоним активности .

  1. В манифесте:

     <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); 

После этого приложение будет убито один раз и при следующем запуске приложения, MainActivity будет запуском.

Как и выше, @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.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); } 

Теперь, когда вы впервые запустили приложение, LauncherActivity будет запущен, и когда вы выйдете из приложения, запустите приложение снова, будет запущена MainActivity.