Определить активность по умолчанию (при запуске приложения) программно - PullRequest
7 голосов
/ 27 июня 2011

Мое приложение состоит из нескольких действий.

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

Это нормально и действительно просто, задание по умолчанию - это занятие А.

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

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

Единственный способ, которым я нашел решение, это сделать это в Деятельности A. Это решение очень уродливо, потому что Мероприятие 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;
        }
    } 

1 Ответ

8 голосов
/ 27 июня 2011

Вместо 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);
    ....
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...