繁体   English   中英

如何在蜂窝设备之前使用“Intent.FLAG_ACTIVITY_CLEAR_TASK”?

[英]How to use “Intent.FLAG_ACTIVITY_CLEAR_TASK” on pre-honeycomb devices?

背景

我需要在某些事件上启动一个活动(比如通知点击,但它可以是任何其他事件,甚至来自广播接收器),如果它们正在运行,它也会关闭所有其他活动,或者至少不要关注它们.

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

问题

似乎 Intent.FLAG_ACTIVITY_CLEAR_TASK 标志仅适用于API 11 (honeycomb) 及更高版本。

一些网站声称IntentCompat可以提供帮助,但即使在那里,文档也特别指出:

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

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

问题

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

我真的应该为每个活动添加一个LocalBroadcastManager来监听这个事件,并在它发生时关闭自己吗?

也许我在这里遗漏了什么? IntentCompat 类中显示的其他功能是什么? 也许其中之一可以帮助解决这个问题?

请帮忙。


编辑:似乎Intent.FLAG_ACTIVITY_MULTIPLE_TASK的工作不是专注于以前的活动,但是文档对其工作原理的描述非常模糊,并且还对此有很多警告。

我注意到的是,即使我们关闭了新的 Activity,应用程序之前的任务也不会成为焦点,所以它会回到用户之前访问过的地方。

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

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

你可以使用

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

或者您也可以在所有活动中使用 BroadcastReciver ..

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM