如何从广播接收器启动活动时完成以前的所有活动

时间:2014-06-16 12:29:16

标签: android broadcastreceiver alarmmanager

我已经使用闹钟管理器在特定时间启动stage2,每当应用程序从警报管理器接收广播时,它将启动适当的活动。 当app在stage1中运行并且收到广播时,我使用了以下的coed来启动适当的活动

Intent i = new Intent(context, StageTwo.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);

此代码启动活动正常但按下后退键时,前一阶段1活动恢复 我想在按下后退按钮退出应用程序,因为在启动活动时不允许用户返回

请求帮助,因为我陷入困境,无法找到解决方案

5 个答案:

答案 0 :(得分:0)

只是您可以在开始第二项活动时完成当前活动:

看看这段代码

    Intent i = new Intent(context, StageTwo.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    finish();
    context.startActivity(i);

祝你好运..

答案 1 :(得分:0)

给定here

  

Android的设计不赞成选择退出应用程序,而是通过操作系统管理它。您可以通过相应的Intent:

调出Home应用程序

试着消除onBack,即使这样按下并启动主屏幕

@Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

    }

就像标题所暗示的那样 如果您要退出所有活动尝试此方法

1.创建一个名为 ActivityListHolder

的类

2.创建一个活动的数组列表,如

List<Activity> activities=new ArrayList<Activity>(); (make it static)

3.on创建的每个活动都会按ActivityListHolder.activities.Add(this)

将活动添加到列表中

4.无论何时你想完成活动,你都可以在列表中循环并检查它不是当前活动,并尝试在该对象上调用finish()

答案 2 :(得分:0)

public abstract class AppBaseActivity extends Activity {

public static final String FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION = "com.myActivity.FINISH_ALL_ACTIVITIES";

private BaseActivityReceiver baseActivityReceiver = new BaseActivityReceiver();

public static final IntentFilter INTENT_FILTER = createIntentFilter();

private static IntentFilter createIntentFilter() {
IntentFilter filter = new IntentFilter();
filter.addAction(FINISH_ALL_ACTIVITIES);
return filter;
}

protected void registerBaseActivityReceiver() {
registerReceiver(baseActivityReceiver, INTENT_FILTER);
}

protected void unRegisterBaseActivityReceiver() {
unregisterReceiver(baseActivityReceiver);
}

public class BaseActivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION)) {
finish();
}
}
}

protected void closeAllActivities() {
sendBroadcast(new Intent(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION));
}
}

答案 3 :(得分:0)

在Api等级16及以上,您可以使用

finishAffinity();

方法及其下方,您必须手动保存所有创建的活动列表并逐个完成。 API 16下面没有第二个选项:(。然后开始你的启动活动。 多数民众赞成......

答案 4 :(得分:0)

我解决了这个问题,我认为这是我的愚蠢错误,因为我忘记了活动生命周期

当广播接收器发起stage2活动时,我只是在stage1活动的onPause()方法中调用finish()方法,现在问题解决了。