当从广播接收器启动父活动时,后退按钮和向上按钮不起作用

时间:2015-01-15 10:22:08

标签: android android-intent android-activity

我有一个使用以下代码启动活动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>

2 个答案:

答案 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);

现在它正在运作