gpt4 book ai didi

android - 通知打开 Activity ,按后退按钮,防止打开后退堆栈 Activity ?

转载 作者:行者123 更新时间:2023-11-29 22:19:29 26 4
gpt4 key购买 nike

这看起来与 my previous question 非常相似因为这是某种跟进。我对给出的唯一解决方案不是很满意;此外,解决方案是针对与这个问题略有不同的问题。所以让我试着再次解释这个问题......

  1. 在启动时创建通知(使用 BroadcastReceiver)。
  2. 我的应用主 Activity 已打开并按下主页按钮(该 Activity 将被发送到后台堆栈)。
  3. 我拉下状态栏并按下之前在启动时创建的通知。
  4. 这将启动一些与主要 Activity 不同的 Activity 。
  5. 我按下后退按钮并显示主要 Activity 。

这与我之前的问题并没有太大不同……问题是,“主要 Activity ”只是一个例子。我本可以打开应用程序主 Activity ,然后通过菜单选项打开关于 Activity 并按下主页按钮。返回堆栈现在是 MainActivity » AboutActivity。这意味着当在“某些 Activity ”(通过按下通知开始)中按下后退按钮时,我们将被带到后退堆栈的顶部,即关于 Activity 。

基本上想要的是防止在“某些 Activity ”中按下后退按钮时打开任何其他 Activity (同样,通过按下通知启动)。我想被带到我所在的位置,这可能是桌面或其他应用程序的 Activity ,但不是我应用程序的 MainActivityAboutAcitivity 因为那不是我所在的位置,那些在后面的堆栈中,在后台“ sleep ”。

我想出了一个解决方案,但我认为它不是很优雅,我一直在寻找更优雅的东西...如果您有任何其他建议,请告诉我。

无论如何,这是我提出的解决方案:

// I use this class for public static (or public static final) members and
// methods

public final class AppHelper {
public static final String KEY_RESUME_FROM_NOTIFICATION = "resumeFromNotification";

private static boolean sResumeFromNotification = false;

public static boolean getResumeFromNotification() {
return sResumeFromNotification;
}

public static void setResumeFromNotification(boolean resumeFromNotification) {
sResumeFromNotification = resumeFromNotification;
}
}

public class MainActivity extends ListActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
(...)
}

@Override
protected void onResume() {
super.onResume();

if(AppHelper.getResumeFromNotification()) {
AppHelper.setResumeFromNotification(false);
moveTaskToBack(true);
}
}

}

public class AboutActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
(...)
}

@Override
protected void onResume() {
super.onResume();

if(AppHelper.getResumeFromNotification()) {
AppHelper.setResumeFromNotification(false);
moveTaskToBack(true);
}
}

}

public class SomeActivity extends Activity {

// This will be called when the notification is pressed and the activity is
// not opened yet

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
(...)

extractIntentExtras(intent);
}

// This will be called if the activity is already opened and the
// notification is pressed

@Override
protected void onNewIntent(Intent intent) {
extractIntentExtras(intent);
super.onNewIntent(intent);
}

private void extractIntentExtras(Intent intent) {
Bundle bundleExtras = intent.getExtras();

if(bundleExtras != null) {
// These intent extras are set on the Intent that starts this activity
// when the notification is pressed

AppHelper.setResumeFromNotification(bundleExtras.getBoolean(
AppHelper.KEY_RESUME_FROM_NOTIFICATION));

mRowId = bundleExtras.getLong(AgendaNotesAdapter.KEY_ROW_ID);
populateNoteUpdateFields();
}
}

}

我不知道,但这个解决方案对我来说看起来不是很优雅(但它按我预期的那样工作)并且我正在寻找替代方案或对我提出的解决方案作为可接受的良好解决方案征求强烈意见.想法?

最佳答案

在做了更多阅读之后,也许这是您需要的标志组合:

Intent intent = new Intent(mContext, SomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent);

我认为这应该会强制您的 SomeActivity 类在一个全新的任务中启动。

关于android - 通知打开 Activity ,按后退按钮,防止打开后退堆栈 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7640898/

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