使用字符串标记和int ID删除通知?

use*_*701 4 android

我想在通知栏中放一个通知。它是针对多人游戏的,我想在轮到他们行动时通知用户。他们可以一次参加多场比赛,如果这是他们的举动,我会每场比赛发送一个通知。每个游戏都有一个唯一的ID,因此我想发送如下通知:

int TYPE_NOTIF_YOUR_TURN = 0;
String gameId1 = "abc";
String gameId2 = "xyz";

mgr.notify(gameId1, TYPE_NOTIF_YOUR_TURN, notification);
mgr.notify(gameId2, TYPE_NOTIF_YOUR_TURN, notification);
Run Code Online (Sandbox Code Playgroud)

现在,如果我需要取消其中一个通知,我可以使用标签(在我的情况下为gameId)来查找?:

// only remove the second notification:
mgr.cancel(gameId2, TYPE_NOTIF_YOUR_TURN);
Run Code Online (Sandbox Code Playgroud)

那是怎么回事?

谢谢

Squ*_*onk 5

是的,这就是它的工作原理。

不过,在旁注中,我将使String标记对于您的应用程序包而言是唯一的。例...

String gameId1 = "com.mycompany.mypackage.gameid.abc";
String gameId2 = "com.mycompany.mypackage.gameid.xyz";
Run Code Online (Sandbox Code Playgroud)

其背后的原因是,在取消时,字符串和int必须匹配以标识要取消的通知。许多应用程序可能使用1、2、3等的int值。因此,字符串标签越简单,另一个应用程序(使用简单标签)就越可能会意外取消您的通知之一。

通常,这似乎不太可能,但是独特的标签会避免这种情况。尽管我没有对此进行过多研究,但这似乎还是推荐的做法。

  • 标签只需要对于您的包裹名称是唯一的。 (5认同)
  • 显示通知(并取消通知)时,使用的“ tag”和“ id”组合必须与应用程序唯一。标签也可以为空,并且认为其他应用可能会意外取消其他通知是错误的。此处的文档:http://developer.android.com/reference/android/app/NotificationManager.html (5认同)