android - alarmmanager 2次

标签 android alarmmanager android-pendingintent

我有一个名为 AlarmReceiverBroadcastReceiverToast 的“闹钟有效”。我正在尝试设置一个重复的 PendingIntent 以在 5:45 和 17:30 触发 AlarmReceiver,但在启动应用程序几秒钟后我看到“警报工作” .为什么立即发送 PendingIntent

 public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Calendar cal1 = Calendar.getInstance();
        cal1.set(Calendar.HOUR_OF_DAY, 05);
        cal1.set(Calendar.MINUTE, 45);
        cal1.set(Calendar.SECOND, 00);

        Calendar cal2 = Calendar.getInstance();
        cal2.set(Calendar.HOUR_OF_DAY, 17);
        cal2.set(Calendar.MINUTE, 30);
        cal2.set(Calendar.SECOND, 00);

        Intent intent = new Intent(this, AlarmReceiver.class);

        PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent,      PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(),cal2.getTimeInMillis(), pi);


        Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();

    }


}

报警接收器:

public class AlarmReceiver extends BroadcastReceiver {


        public void onReceive(Context context, Intent intent) {

            Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();

}

最佳答案

but I see "alarm worked" after few seconds of starts of my app.

我相信您收到第一个警报就好了。

但您认为它没有重复。这个错误,它重复...每~43 年一次。您正在使用 setRepeating 的第三个参数不正确,尝试:

Calendar cal1 = Calendar.getInstance(); // Now
cal1.add(Calendar.SECONDS, 5); // Change to five seconds from now

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
        cal1.getTimeInMillis(), 
        10000, /* Repeat every 10 seconds */ 
        pi);

第三个参数是一个间隔。此代码创建一个警报,该警报在 5 秒后响起,然后每 10 秒重复一次。通过使用 cal2,您不小心将间隔设置为将近 43 年。


要设置两个不同的闹钟,请使用:

Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.HOUR_OF_DAY, 05);
cal1.set(Calendar.MINUTE, 45);
cal1.set(Calendar.SECOND, 00);

Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.HOUR_OF_DAY, 17);
cal2.set(Calendar.MINUTE, 30);
cal2.set(Calendar.SECOND, 00);

// Test if the times are in the past, if they are add one day
Calendar now = Calendar.getInstance();
if(now.after(cal1))
    cal1.add(Calendar.HOUR_OF_DAY, 24);
if(now.after(cal2))
    cal2.add(Calendar.HOUR_OF_DAY, 24);

// Create two different PendingIntents, they MUST have different requestCodes
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent morningAlarm = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
PendingIntent eveningAlarm = PendingIntent.getBroadcast(getApplicationContext(), 1, intent, 0);

// Start both alarms, set to repeat once every day
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(), DateUtils.DAY_IN_MILLIS, morningAlarm);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), DateUtils.DAY_IN_MILLIS, eveningAlarm);

关于android - alarmmanager 2次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13940073/

相关文章:

Android MediaRecorder 在设置配置文件后崩溃

java - Android AlarmManager 启动带有铃声的服务

android - 如何获得已经挂起的 PendingIntent 的 Intent extra?

android - 待定 Intent 立即触发

android - 有什么方法可以通过双击自动访问 Logcat 中的任何登录?

android - 如何访问AlertDialog.Builder构建的AlertDialog消息?

android - pendingAlarmIntent.cancel() 或 AlarmManager.cancel(pendingAlarmIntent)?

android - 从 Intent 中获取额外信息(BaseAdapter => BroadcastReceiver)

android - 未在屏幕上触发的警报管理器已关闭

android - handler.removeCallbacksAndMessages 不工作