android挂起意图通知问题

spa*_*agi 72 notifications android android-intent

我在我的应用程序中发生了一个警报,它会启动一个通知,然后在按下时启动一个活动.问题是,当我创建多个警报时,从通知启动的活动会获得与第一个相同的额外内容.我认为这个问题要么是我在未决意图中的意图,要么是在未决意图本身.我想我可能需要在其中一个上放一面旗帜,但我不知道哪一个.

Intent showIntent =new Intent(context, notificationreceiver.class);
    showIntent.putExtra("details", alarmname);

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
        showIntent, 0); 

    notification.setLatestEventInfo(context, "The event is imminent",
            alarmname, contentIntent);
Run Code Online (Sandbox Code Playgroud)

和通知的接收者

Bundle b = getIntent().getExtras();
    String eventname = b.getString("details");
    details.setText(eventname);
Run Code Online (Sandbox Code Playgroud)

每次下次通知发生时,"详细信息"额外都是相同的,而不是具有不同的值.直到我设置意图,我确信正确的值转到"详细信息",因此每次按任何通知时都会获得第一个意图的问题.如何才能启动正确的意图呢?希望我尽可能清楚,谢谢!

小智 116

我解决这个问题的方法是在获得PendingIntent时分配一个唯一的requestCode:

PendingIntent.getActivity(context, requestCode, showIntent, 0); 
Run Code Online (Sandbox Code Playgroud)

通过这样做,您将向系统注册不同/唯一的intent实例. 提示:使requestCode唯一的一个好方法是将当前系统时间传递给它.

int requestID = (int) System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)

  • requestCode确实没有被任何东西使用,但它确实使意图独特,阻止它们被覆盖!优秀的工作u-ramos! (9认同)
  • 注意,currentTimeMillis类型为long,因此如果转换为int,它将被截断.我不知道它是多么可能,是否重要,但它可以重复.在这种情况下,您可以使用静态递增的值 (2认同)

Com*_*are 68

问题是,当我创建多个警报时,从通知启动的活动会获得与第一个相同的额外内容.

正确.

如何才能启动正确的意图呢?

这取决于您是否有两个将同时注册的警报.

如果没有,您可以使用FLAG_ONE_SHOT或其中一个其他PendingIntent标志让您的第二个PendingIntent使用更新的额外.

但是,如果您将同时注册两个警报,并且具有不同的Intent附加功能,则需要使两者Intents更具实质性的不同,以便在比较两者时filterEquals()返回false.例如,您可以调用setData()setAction()为每个值提供不同的值Intent.

  • 男人非常感谢你的帮助.因为有可能一起发出警报并且在通知栏上有多个通知,所以我使用FLAG_UPDATE_CURRENT标志来表示待处理的意图.但真正的交易就像你说的警告名称上的意图setAction,现在它可以知道哪些意图是不同的,什么是相同的.再次感谢! (2认同)
  • setAction也为我工作.我只是想知道为什么官方SDK没有提到它. (2认同)
  • 您还可以在创建待处理意图时使用不同的请求代码,使用哈希,这非常方便,并且可能比使用setData更干净 (2认同)