java - 奇怪的 AlarmManager 行为

标签 java android broadcastreceiver alarmmanager

我有 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/

相关文章:

java - 未调用 BroadcastReceiver 的 onReceive

android - MediaRecorder.start() 中的 IllegalStateException

Java 枚举 - 稍后转换的存储类型

java - 如何在没有名称的android中解析json数组?

java - Android Studio 给出了多余的 Actor 警告,但它并不是真的多余

android - 将Android App与本地机器上存储的Mysql数据库连接

java - 仅当用户确认选择时才在 JComboBox 上处理 actionPerformed

java - JPA、继承和instanceof

java - DriverManager如何获取jdbc驱动类的实例

android - 接收尚未开始的 Activity 的广播?