2017-08-02 122 views
0

我正在开发Android中的闹钟应用程序。该流程很简单,我只是创造了的PendingIntent,然后我打电话的AlarmManager很像下面setExact()方法。使用相同的请求代码保留两个pendingIntents

 Intent myIntent = new Intent(context, BroadcastReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0); 

     AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE); 
     alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 
     System.currentTimeMillis() + difference, pendingIntent); 

一些测试后,我意识到,与上面的代码,因为我设置requestCode的PendingIntent的零我只能设定一个报警,如果我设置其他报警与requestCode集为0,那么它将覆盖前一个。有没有办法解决这个问题,而无需更改requestCode?我想也许这些标志可以帮助我,但我没有找到一个不会覆盖以前pendingIntent的标志。

我知道明显的解决方案是将0更改为另一个int,然后跟踪所有我的整数,选择一个未使用的整数。如果我刚刚开始项目,该解决方案将会很好,但是我已经在中间,并且使用预定义的请求代码Enums。这是很难改变这种机制,并跟踪个人的整数这就是为什么我问是否有一种方式,不会覆盖pendingIntent当一个新的登录相同requestCode。先谢谢你。

+0

我在问是否存在能够区分它们的特定类型的标志 – Libathos

回答

2

我问,如果存在某种类型的标志,这将是能够区分它们

没有,这是有道理的,因为这已经是requestCode参数的目的。

有关信息,这些都是你就标志选项:

enter image description here

你将不得不改变你的机制,使其能够有待定意图不同requestCodes。这可能是很多工作,但这是你必须做的。

+0

非常感谢您的回答,我必须在做出更改之前确认。 – Libathos

+0

其实没有。如果你让所有的Intent都是唯一的,你不必使用不同的requestCode。您可以通过在每个“意图”中设置不同的ACTION或不同的数据来实现。 –

+0

@大卫出色,我不知道。如果OP删除接受,我会删除我的答案 –

1

您可以让Intent独一无二地为每一个设置不同的ACTION。那么你仍然可以使用相同的requestCode,并且会有不同的PendingIntent

如果您希望能够稍后取消警报,则需要跟踪您使用的操作。

相关问题