ここ (および他の場所) で、アプリの起動時に表示するアクティビティを動的に選択する方法について説明している記事をいくつか読みました。以下は私のコードです:
AndroidManifest.xml
<activity android:name=".StartupActivity"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
StartupActivity.java
public class StartupActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent intent;
if (RandomClass.getSomeStaticBoolean())
{
intent = new Intent(this, ActivityOften.class);
}
else
{
intent = new Intent(this, ActivityRare.class);
}
startActivity(intent);
finish();
}
}
ActivityOften と ActivityRare の両方がマニフェストで (もちろんランチャー カテゴリなしで) 宣言され、それぞれ ListActivity と Activity を拡張します。最初に表示されるアクティビティの 99% は、RandomClass.getSomeStaticBoolean() に基づく ActivityOften です。
そのため、初めてアイコンからアプリを起動すると、StartupActivity.onCreate 内で中断します。選択は適切に行われます。ただし、その後 (ショートカットまたはアプリ メニューから) アプリを起動しようとすると、ActivityOften が再び表示されます。StartupActivity クラス内でそれ以上の中断は発生しません。RandomClass.getSomeStaticBoolean() の値が変更され、ActivityRare が表示されるはずであることがわかっているにもかかわらず、最初のアクティビティがポップアップし続けます。
何か案は?
ありがとう、メルシー、グラシアス、ダンケ、グラジー!ショーン