我正在开发的启动器应用程序中的两个按钮有问题。第一个按钮应该启动 TotalCommander 的内置文本编辑器以显示某个文本文件。第二个按钮应该启动 TotalCommander。所以我从下面的代码开始......
ImageButton button1 = (ImageButton) findViewById(R.id.imageButton1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file:///storage/emulated/0/myNotes.txt"), "text/plain");
startActivity(intent);
}
});
ImageButton button2 = (ImageButton) findViewById(R.id.imageButton2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent= getPackageManager().getLaunchIntentForPackage("com.ghisler.android.TotalCommander");
startActivity(intent);
}
});
...但它以一种意想不到的方式起作用:
- 第一个按钮按预期打开文本编辑器。
- 然后按主页按钮按预期显示启动器。
- 然后第二个按钮按预期打开 TotalCommander。
- 现在按下后退按钮会显示文本编辑器,而不是显示启动器。
...所以更具体地说:我希望按钮使用单独的任务,以便从文本编辑器或 TotalCommander 导航回来显示启动器。(除非从 TotalCommander 打开文本编辑器,在这种情况下,应该由 TotalCommander 在其自己的任务中启动文本编辑器活动的新实例。)
所以我添加intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
到两个按钮...
ImageButton button1 = (ImageButton) findViewById(R.id.imageButton1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file:///storage/emulated/0/myNotes.txt"), "text/plain");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
ImageButton button2 = (ImageButton) findViewById(R.id.imageButton2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent= getPackageManager().getLaunchIntentForPackage("com.ghisler.android.TotalCommander");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
...但这会导致相同的行为。FLAG_ACTIVITY_NEW_TASK
由于 TotalCommander 活动的任务相关性,我假设s 被忽略。如何让 FLAG_ACTIVITY_NEW_TASK 忽略 taskAffinity,或修改相关 TotalCommander 活动的 taskAffinity?