如何在预蜂窝设备上使用“Intent.FLAG_ACTIVITY_CLEAR_TASK”?

时间:2013-10-07 10:08:50

标签: android android-intent android-3.0-honeycomb clear

背景

我需要在某些事件上启动活动(例如通知点击,但它可以是任何其他事件,即使是来自broadcastReceiver),如果它们正在运行,它们也将关闭所有其他活动,或者至少不提供专注于他们。

为此,我使用Intent.FLAG_ACTIVITY_CLEAR_TASK标志。

问题

似乎Intent.FLAG_ACTIVITY_CLEAR_TASK标志仅适用于 API 11 (蜂窝)及以上。

有些网站声称IntentCompat可以提供帮助,但即使有文档明确说明:

  

只有在支持API 11或更高版本的设备上才会遵守此标志。

遗憾的是,我找不到使用IntentCompat函数的任何示例,并且描述与intents标记文档一样模糊和混乱

问题

我怎样才能克服这个问题?

我应该为每个活动添加一个LocalBroadcastManager来监听这个事件,并在发生这种情况时关闭它们吗?

也许我在这里遗漏了什么? IntentCompat类中显示的其他函数是什么?也许其中一个可以帮忙吗?

请帮忙。


编辑: 似乎Intent.FLAG_ACTIVITY_MULTIPLE_TASK的工作不是关注以前的活动,但是文档对它的工作方式有一个非常含糊的描述,并且它也有很多关于它的警告。

我注意到的是,即使我们关闭了新活动,应用程序的上一个任务也不会成为焦点,因此它将返回到用户之前访问过的位置。

有谁知道这个标志是如何工作的,我应该知道什么?在这种情况下使用是否安全?

如果我找不到任何其他解决方案,我想我会将其添加为答案。

1 个答案:

答案 0 :(得分:-2)

您可以使用

       intent.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
           Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

或者您也可以在所有活动中使用BroadcastReceiver。

  public class MyActivity extends Activity {
     private FinishReceiver finishReceiver;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    finishReceiver = new FinishReceiver();
    registerReceiver(finishReceiver,
            IntentFilter.create("Finish", "XYZ"));
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(finishReceiver);
  }

   private final class FinishReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        finish();
    }
  }
 }

清理堆栈:

           Intent intent = new Intent("Finish");
           intent.setType("XYZ");
           sendBroadcast(intent);