我有一个使用以下代码启动活动A的广播接收器
Intent appIntent = new Intent(context, A.class);
appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_FROM_BACKGROUND);
context.startActivity(appIntent);
A活动开始正常,然后在内部我按下一个按钮,使用此代码启动另一个活动B
TaskStackBuilder tsb = TaskStackBuilder.create(this);
tsb.addParentStack(this);
Intent intent=new Intent(this, B.class);
tsb.addNextIntent(intent);
tsb.startActivities();
活动B开始正常,但是我按下按钮或向上按钮活动A没有显示
这是manifest fiel中两种活动的定义
<activity android:name=".A" android:launchMode="singleTop"
android:label="@string/app_name" >
</activity>
<activity android:name=".B"
android:label="@string/app_name" android:parentActivityName="myPackage.A">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="myPackage.A" />
</activity>
在活动B中我有以下代码
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.simplelistlayout);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public void onBackPressed() {
moveTaskToBack(true);
B.this.finish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
// Respond to the action bar's Up/Home button
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
};
我尝试调试,我认为问题是当我从广播接收器调用活动A时,FLAG_ACTIVITY_NEW_TASK导致意图同时具有动作(android.intent.action.MAIN)和类别(android.intent.category.LAUNCHER )和活动A不是我的启动器活动,所以当活动B收到后退动作或按下向上按钮时,我看到打算正确地使用活动A,但是启动活动的动作和类别,我该如何解决这个问题? / p>
答案 0 :(得分:0)
如果您在B
中按BACK,它会执行以下代码:
@Override
public void onBackPressed() {
moveTaskToBack(true);
B.this.finish();
}
这会将任务移到后台,这就是为什么你不会看到活动A.你为什么要这样做?
答案 1 :(得分:0)
我在广播接收器中将呼叫更改为活动A
Intent appIntent=new Intent(context, A.class);
appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(appIntent);
以及对活动B的调用
Intent intent=new Intent(this, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
现在它正在运作