gpt4 book ai didi

android - 使用 PendingIntent 传递数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:32:42 27 4
gpt4 key购买 nike

我正在尝试发出消息已到达的通知。我添加了一个 Action ,希望在通知中显示一个图标 (smallredball)。我希望如果用户点击 smallredball,主 Activity 将启动,并且 Activity 检查 extras 包,将看到执行与刚刚正常启动时不同的命令。

通知与文本一起显示在目标手机(运行 KitKat)上,但小红球图标从不显示。当用户触摸通知时,Activity 执行时没有额外的。编辑: Activity 现在获得额外的 bundle 。

这是发送通知的代码:

private void raiseNotification( String username, String mesText) 
{
DebugLog.debugLog("GCMIntentService: Attempting to Raise Notification ", false);
NotificationCompat.Builder b = new NotificationCompat.Builder(this);

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("whattodo", "showmessage");
intent.setAction(Long.toString(System.currentTimeMillis())); //just to make it unique from the next one
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);


b.setContentTitle("New SafeTalk Message")
.setSmallIcon(R.drawable.note24x24)
.setContentText("From " + username + " " + mesText)
.setTicker("New SafeTalk Message")
.setContentIntent(pIntent)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setAutoCancel(true)
.addAction(R.drawable.smallredball, "Read Now", pIntent);

NotificationManager mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mgr.notify(0, b.build());
}

这是 Activity 的代码 fragment :

        Bundle extras = getIntent().getExtras();
if (extras == null)
{
GlobalStuff.mpBad.start();
}
else
{
String myOrders = extras.getString("whattodo");

if (myOrders.equals("showmessage"))
GlobalStuff.mpBeep.start();

}

为什么通知中没有显示图标?由于我将 AutoCancel 设置为 true,我预计只需触摸通知就会让它消失。但是它运行的应用程序不提供额外的 bundle ?谢谢,院长

最佳答案

此主题包含在 an existing question

由于解决这个问题和我遇到的类似问题的要点在该主题中散布了一些,这是我的两点备忘单:

第 1 点:使用如下代码创建待定 Intent 。最后一个参数中标志的选择很重要:

PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

要点 2:挂起的 Intent 存储在全局系统表中,只有创建它们的 Intent 的某些部分是用于在此表中查找内容的“键”的一部分。 Extras 不是 key 的一部分,因此如果您希望两个 Intent 映射到两个不同的待定 Intent ,请确保它们在其他方面有所不同,例如具有不同的操作、数据或类型。

这个例子改变了 Action :

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("whattodo", "showmessage");
// add this:
intent.setAction("showmessage");

( Action 可以是任何东西,只要它与您在其他地方使用的相同类不同即可。)

latest version of the Javadoc for pending intents. 中有很好的解释,尤其是我引用的这句话:

... it is important to know when two Intents are considered to be the same for purposes of retrieving a PendingIntent. A common mistake people make is to create multiple PendingIntent objects with Intents that only vary in their "extra" contents, expecting to get a different PendingIntent each time. This does not happen. The parts of the Intent that are used for matching are the same ones defined by Intent.filterEquals.

关于android - 使用 PendingIntent 传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172450/

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