gpt4 book ai didi

android - 从状态栏通知 Intent 中删除或关闭您自己的 Activity 窗口

转载 作者:太空宇宙 更新时间:2023-11-03 12:01:02 25 4
gpt4 key购买 nike

我有一个“闹钟”应用程序,其中包含几种可能在任何给定时间触发的不同闹钟类型。当警报响起时,它会添加一个状态栏通知。当用户使用状态栏中的“全部清除”按钮时,我希望删除 Intent 从屏幕上删除并关闭警报 Activity 窗口。我怎样才能做到这一点?因为我的警报 Activity 不是单一任务 Activity ,所以可以一次创建多个 Activity 窗口,所以我不能只使用带有 onNewIntent() 函数将运行的一些数据的 Intent 并关闭 Activity 本身。我需要找到一种方法从 Activity 外部终止警报窗口。

感谢您的帮助。

最佳答案

Hacky 但 100% 有效的解决方案:您可以发送一个所有 Activity 都在等待并调用 finish()Broadcast .

private String action = "clear";
private String type = "content://whatever_you_like"; //You should read stuff about this because it's a hack..

每个 Activity 的onCreate:

  clearStackManager = new ClearStackManager();
registerReceiver(clearStackManager,
IntentFilter.create(action, type));

然后定义它:

 private final class ClearStackManager extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
}

onDestroy:

unregisterReceiver(clearStackManager);

调用它:

 public void clearStack() {
Intent intent = new Intent(action);
intent.setType(type);
sendBroadcast(intent);
}

开箱即用的解决方案:使用 FLAG CLEAR_TOP(删除除该 Activity 之外的所有 Activity )按 Intent 调用堆栈的第一个 Activity (如果它始终相同),然后在 onNewIntent 上完成最后一个 Activity 一个。


我不知道它是否有效解决方案: 我还发现了这个:https://stackoverflow.com/a/6403577/327011但我从未处理过 Action ,所以我不确定如果多个 Activity 具有相同的 Action 会发生什么。


更新:

您应该使用 LocalBroadcastManager 而不是“全局”广播以避免发送全局广播。

http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

关于android - 从状态栏通知 Intent 中删除或关闭您自己的 Activity 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7486865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com