Определять действие по умолчанию (когда приложение запускается) программно

Моя заявка состоит из нескольких видов деятельности.

Активность А – мое главное меню с некоторыми значками. Эта активность может запускаться в зависимости от того, какой значок вы нажимаете: Действия B, C, D, E или F.

Это прекрасно и очень легко, активность А по умолчанию.

Теперь я сделал выбор в предпочтении, который позволяет пользователям начинать свое любимое занятие.

Некоторые пользователи фактически предпочтут, например, получить непосредственную активность B.

Единственным способом, которым я нашел решение, было сделать это в Activity A. Это решение очень уродливо, потому что Activity A всегда запускается и закрывается автоматически:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); settings = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); final Intent intent = getIntent(); String action = intent.getAction(); if (Intent.ACTION_MAIN.equals(action)) { switch (Integer.valueOf(settings.getString("Activitypref", "1"))) { case 2: Intent i = new Intent(ActivityA.this, ActivityB.class); finish(); startActivity(i); break; case 3: i = new Intent(ActivityA.this, ActivityC.class); finish(); startActivity(i); break; case 4: i = new Intent(ActivityA.this, ActivityD.class); finish(); startActivity(i); break; case 5: i = new Intent(ActivityA.this, ActivityE.class); finish(); startActivity(i); break; case 6: i = new Intent(ActivityA.this, ActivityF.class); finish(); startActivity(i); break; default: break; } } 

Вместо ActivityA рассмотрите возможность использования операции оболочки для вызова из пусковой установки. Вы устраните необходимость проверки на ACTION_MAIN. Также вы можете сохранить имя целевой активности в настройках и использовать его для непосредственного запуска вашей целевой деятельности с помощью другой сигнатуры намерения:

 public Intent (String action) 

  <activity class=".StartActivity" android:label="..."> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity class=".ActivityA" android:label="..."> <intent-filter> <action android:name="mypackage.ActivityA" /> </intent-filter> </activity> 

И в StartActivity

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); settings = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); String action = settings.getString("Activitypref","mypackage.ActivityA"); Intent intent = new Intent(action); startActivity(intent); .... } 

Возможно, вам придется немного поиграть, чтобы все исправить.