android - 从 bundle 中删除条目(即附加内容)似乎无法与后退按钮结合使用

标签 android android-intent android-activity

我有一个 BroadcastReceiver 可以收听传入的 SMS。如果消息来自某个发件人,则 BroadcastReceiver 使用以下代码启动我的应用程序:

final Intent activityIntent = new Intent(context, MainActivity.class);
activityIntent.putExtra("smsChallenge", smsText);
activityIntent.putExtra("smsSenderNumber", senderMobilNumber);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(activityIntent);

在我的应用程序的 MainActivity 中(即在 onCreate() 中),我从 Intent 中提取值 smsChallenge 并使用以下代码在提取后删除它:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    smsChallenge = extras.getString("smsChallenge");
    extras.remove("smsChallenge");
}

所以我的应用程序从 SMS 启动并运行良好......但是如果我选择按下返回按钮并重新启动应用程序(即通过任务管理器),值 smsChallenge 仍然在 bundle extras。 这意味着,我重新启动的应用程序认为它是由于一条新的 SMS 而重新启动的,但事实并非如此......

为什么在使用“返回”按钮并再次重新启动应用程序时从 bundle 中删除键值似乎不起作用?有什么想法吗?

最佳答案

因为 getExtras() 创建了一个 intent extras 的副本。

你必须这样做

getIntent().removeExtra("smsChallenge");

文档:http://developer.android.com/reference/android/content/Intent.html#removeExtra(java.lang.String)

关于android - 从 bundle 中删除条目(即附加内容)似乎无法与后退按钮结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10015170/

相关文章:

android - 在android设置中防范 "a matching Activity may not exist"

android - 如何跟踪 Activity 以便稍后重新启动它

java - 为什么正则表达式不能正常工作?

android Activity 保护免受 Intent

android - React-Native Android - 从 Intent 中获取变量

android - SplashScreen - 关闭时间

android - 我如何知道我的 Android 应用程序是否在后台运行?

java - 如何将包含负数的字符串解析为整数?

android - API 方法 9 在 API 方法 3 Android 项目中编译,运行时错误

java - 使用 apache-poi 在 excel 中画一条线