首页 > 解决方案 > Android警报管理器每天不工作两次

问题描述

我需要提醒经理每天重复两次,为此我在两个不同的时间使用了 2 个日历对象,但它只适用于第一次而不是第二次

主要活动

       public void startEvent(View view) {

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

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

            Intent intent = new Intent(getApplicationContext(), YourBroadCastReceiver.class);
            PendingIntent pIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
            AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
            am.setRepeating(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(),cal2.getTimeInMillis(), pIntent);
            Toast.makeText(this, "Alarm is set now", Toast.LENGTH_SHORT).show();

        }

广播接收器

 @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Send Location to server", Toast.LENGTH_LONG).show();

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("test");
        myRef.push().setValue("New Location Received");

    }

标签: javaandroidalarmmanageralarm

解决方案


    Intent intent; 
PendingIntent pIntent; 
AlarmManager alarmManager;

        Date date = new Date();
        Calendar cal_now = Calendar.getInstance();
        cal_now.setTimeInMillis(System.currentTimeMillis());
        cal_now.setTime(date);



private void alarmOne(){
Calendar cal1 = Calendar.getInstance();
cal1.setTimeInMillis(System.currentTimeMillis());
cal_alarm.setTime(date);
                    cal1.set(Calendar.HOUR_OF_DAY, 14); 
                    cal1.set(Calendar.MINUTE, 00);
                    cal1.set(Calendar.SECOND, 00);
                    cal1.set(Calendar.AM_PM, 1);

if(cal1.before(cal_now)){
            // Move to tomorrow for first alarm
            cal1.add(Calendar.DATE, 1);
        }

intent = new Intent(getApplicationContext(), YourBroadCastReceiver.class);
pIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                            cal1.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);
}

private void alarmTwo(){


Calendar cal2 = Calendar.getInstance();
cal2.setTimeInMillis(System.currentTimeMillis());
cal2.setTime(date);
                    cal2.set(Calendar.HOUR_OF_DAY, 14);
                    cal2.set(Calendar.MINUTE, 30);
                    cal2.set(Calendar.SECOND, 00);
                    cal2.set(Calendar.AM_PM, 1);



        if(cal2.before(cal_now)){
            // Move to tomorrow for second alarm
            cal2.add(Calendar.DATE, 1);
        }


pIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, intent, 0);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                            cal2.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);
}

推荐阅读