如何在pre-honeycomb设备上使用 "Intent.FLAG_ACTIVITY_CLEAR_TASK"?

问题描述 投票:7回答:1

背景介绍

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

为此,我使用了 Intent.FLAG_ACTIVITY_CLEAR_TASK。 旗。

问题是

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

一些网站上有这样的说法 IntentCompat 可以帮助 , 但即使在那里的文档中明确表示 :

这个标志只有在支持API 11或更高版本的设备上才会被遵从.可悲的是,我找不到任何使用IntentCompat函数的例子,而且描述和intents标志文档一样模糊和混乱。

遗憾的是,我找不到任何使用IntentCompat函数的例子,描述也和intents标志文档一样模糊不清。

这个问题

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

我真的应该添加一个 本地广播管理器 为每个活动监听这个事件,并在事件发生时关闭自己?

也许我遗漏了什么?IntentCompat类中还有哪些其他的功能? 也许其中一个可以帮助解决这个问题?

请帮助我。


EDIT:看来 Intent.FLAG_ACTIVITY_MULTIPLE_TASK。 做的工作是不聚焦在以前的活动上,但是文档中对它的工作原理描述的很模糊,而且也有很多警告。

我注意到的是,即使我们关闭了新的活动,应用程序的前一个任务也不会被关注,所以它会回到用户之前访问过的地方。

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

如果我找不到其他的解决方案,我想我会把它作为一个答案。

android android-intent android-3.0-honeycomb
1个回答
-2
投票

你可以使用

       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);
© www.soinside.com 2019 - 2024. All rights reserved.