我有一个 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/