gpt4 book ai didi

java - Intent Intents.Insert.ACTION 只在第一次有效吗?

转载 作者:行者123 更新时间:2023-11-30 02:53:25 25 4
gpt4 key购买 nike

我的 Android 服务创建了一个带有自定义按钮的通知。自定义按钮的操作应打开“创建联系人”系统屏幕,并预先填写电话号码。这是代码:

// create the base notification
Intent notificationIntent = new Intent(context, MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(
context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(title)
.setContentText(text)
.setAutoCancel(false)
.setOngoing(true)
.setContentIntent(pendingIntent);

// add the action to save to contacts
Intent saveIntent = new Intent(ContactsContract.Intents.Insert.ACTION);
saveIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
saveIntent.putExtra(ContactsContract.Intents.Insert.PHONE, text);
saveIntent.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
PendingIntent pendingSaveIntent = PendingIntent.getActivity(context, 0, saveIntent, 0);
builder.addAction(0, "Save to Contacts", pendingSaveIntent);

// show the notification
context.getSystemService(Context.NOTIFICATION_SERVICE).notify(0, builder.build());

该代码第一次运行良好(假设我将“01234-1234567”传递给它)。但是,后续调用会继续显示第一次显示的相同对话框,其中包含相同的值。因此,即使我在输入中使用不同的数字再次调用这段代码(“Intents.Insert.PHONE”额外值的“文本”值),我总是会得到“01234-1234567”。

我尝试取消“联系人”屏幕、手动创建新联系人、完全停止“联系人”应用程序...无论如何,下次我点击通知按钮时,我会看到屏幕上显示我最初传递给第一次尝试。

您有任何解释或发现代码中有任何错误吗?

最佳答案

我解决了。基本上,系统会缓存 Intent ,除非它们除了额外的参数之外还有其他不同之处。在我的代码中,我只更改了电话号码,因此它始终使用相同的(第一个)缓存 Intent 。解决方案是使用一个标志取消当前缓存的 Intent 并创建一个新的

PendingIntent pendingSaveIntent = PendingIntent.getActivity(
context, 0, saveIntent, PendingIntent.FLAG_CANCEL_CURRENT);

关于java - Intent Intents.Insert.ACTION 只在第一次有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23732068/

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