以编程方式定义默认活动(当应用程序启动时)

Waz*_*_Be 7 android default preference android-activity

我的应用程序由一些活动组成.

活动A是我的主菜单,带有一些图标.此活动可以根据您按哪个图标启动:活动B,C,D,E或F.

这很好,很容易,活动A是默认的.

现在,我优先选择允许用户开始他们喜欢的活动.

实际上,一些用户更愿意直接获得活动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;
        }
    } 
Run Code Online (Sandbox Code Playgroud)

Ale*_*man 8

而不是ActivityA考虑使用从启动器调用的包装器活动.您将无需检查ACTION_MAIN.您还可以在首选项中存储目标活动名称,并使用它通过不同的意图签名直接启动目标活动:

public Intent (String action)
Run Code Online (Sandbox Code Playgroud)
 <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>
Run Code Online (Sandbox Code Playgroud)

并在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);
    ....
}
Run Code Online (Sandbox Code Playgroud)

你可能需要摆弄一点点才能做到正确.