我有 2 个 BroadcastReceivers 和 2 个 Intent ,我想点击一个按钮,5 米后开始广播 1,10 米后开始广播 2,发生的事情是它们都在我点击 10 米后开始,我的猜测是, Intent 不是唯一的,但是我正在为他们每个人设置一个不同的 reqeustCode。
按钮的 OnClick:
Bundle bd = new Bundle();
bd.putInt("mInt", i);
Intent intent1 = new Intent(getActivity(), Broadcast_1.class);
intent1.putExtras(bd);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getActivity().getApplicationContext(), i, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager1 = (AlarmManager) getActivity().getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager1.setRepeating(AlarmManager.RTC, System.currentTimeMillis()+1000*60*5, 1000*60*10, pendingIntent1);
Toast.makeText(getActivity(), "countdown started "+i ,Toast.LENGTH_SHORT).show();
Intent intent2 = new Intent(getActivity(), Broadcast_1.class);
intent2.putExtras(bd);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getActivity().getApplicationContext(), i+42212342, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager2 = (AlarmManager) getActivity().getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager2.setRepeating(AlarmManager.RTC, System.currentTimeMillis()+1000*60*10, 1000*60*10, pendingIntent2);
BroadcastReceiver_1 和 _2(它们看起来一样)类:
public class Broadcast_1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Calendar c = Calendar.getInstance();
int seconds = c.get(Calendar.SECOND);
int minutes = c.get(Calendar.MINUTE);
ShowTextFragment.setText("Broadcast_1" + " at " + minutes + " : " + seconds);
}
}
问题: 为什么最近的intent会把之前的intent推到他的开始时间?
我通过打印广播代码执行的时间来确认此行为。请帮忙
最佳答案
您看到的问题是 repeating alarms now work 的方式.为了延长电池生命周期,AlarmManager
现在可以非常自由地重新安排警报,以便将多个警报组合在一起。基本上,如果您需要任何类型的准确计时,您应该忘记使用 setRepeating()
。请改用 setExact()
。如果您需要重复闹钟,只需在闹钟响起时将其重置即可。
关于java - 奇怪的 AlarmManager 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37577296/