Tôi đã thử giải pháp hai, nhưng vấn đề là một hoạt động không thể phát hiện biểu tượng trình khởi chạy nào đã được sử dụng (hãy cho tôi biết nếu tôi sai).
Giải pháp của tôi là thêm hai hoạt động "giả", sau đó khởi chạy hoạt động chính có số "trang" chính xác. Khó khăn với cách tiếp cận này là để xử lý các nhiệm vụ ngăn xếp đúng cách. Khi trình khởi chạy được chọn, hoạt động giả phải được khởi chạy và nó phải gửi ý định đến hoạt động chính. Android cố gắng hết sức để ngăn bạn thực hiện việc này và chỉ mang lại hoạt động cuối cùng lên mặt trước.
Đây là tốt nhất mà tôi có thể đưa ra:
Các hoạt động giả (tương tự cho 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();
}
}
Trong hoạt động chính:
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>
Vấn đề với các mối quan hệ công việc khác nhau là cả hai bệ phóng, cũng như nhiệm vụ chính, xuất hiện trong danh sách "Ứng dụng gần đây".
Tôi sẽ không đề xuất phương pháp này cho bất kỳ ai khác - thay vì chỉ sử dụng một biểu tượng trình khởi chạy.
Đối với giải pháp 2, cách bạn phát hiện biểu tượng trình khởi chạy nào đã được sử dụng? Thông tin này có xuất hiện trong mục đích khởi chạy không? – Ralf
Bạn có thể thêm thêm vào mục đích bắt đầu hoạt động xử lý các đoạn. –
Tôi muốn hai bệ phóng màn hình chính bắt đầu hoạt động, vì vậy tôi không thể thêm bất kỳ tính năng bổ sung nào vào những mục đích đó. – Ralf