解決策2を試しましたが、問題は、使用されたランチャーアイコンを1つのアクティビティで検出できないことです(間違っている場合は教えてください)。
私の解決策は、2つの「ダミー」アクティビティを追加して、正しい「ページ」番号を持つメインアクティビティを起動することでした。このアプローチの難しさは、タスクスタックを適切に処理することです。ランチャーを選択すると、ダミーアクティビティを起動し、メインアクティビティにインテントを送信する必要があります。Androidは、これを防ぐために本当に一生懸命努力し、最後のアクティビティを再び前面に出します。
これは私が思いつくことができる最高のものです:
ダミーアクティビティ(LaunchActivity2と同様):
public class LaunchActivity1 extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent newIntent = new Intent(this, MainActivity.class);
newIntent.putExtra(MainActivity.EXTRA_PAGE, 1);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(newIntent);
finish();
}
}
主な活動:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewPager viewPager = (ViewPager)findViewById(R.id.MainViewPager);
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
int page = getIntent().getIntExtra(EXTRA_PAGE, -1);
if(page >= 0 && page <= NUM_ITEMS)
viewPager.setCurrentItem(page);
}
public void onNewIntent(Intent intent) {
if(intent.hasExtra(EXTRA_PAGE)) {
int page = intent.getIntExtra(EXTRA_PAGE, -1);
ViewPager viewPager = (ViewPager)findViewById(R.id.MainViewPager);
if(page >= 0 && page <= NUM_ITEMS)
viewPager.setCurrentItem(page);
}
}
AndroidManifest.xml:
<!-- LaunchActivity2 is similar -->
<activity android:name=".LaunchActivity1" android:label="Launch 1"
android:clearTaskOnLaunch="true"
android:noHistory="true"
android:taskAffinity="Launch1"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".MainActivity"
android:label="My App"
android:clearTaskOnLaunch="true"
android:finishOnTaskLaunch="true"
android:launchMode="singleTask"
android:taskAffinity="MyApp">
</activity>
さまざまなタスクアフィニティの問題は、両方のランチャーとメインタスクが[最近のアプリケーション]リストに表示されることです。
このアプローチを他の人にはお勧めしません。むしろ、単一のランチャーアイコンを使用するだけです。