Android闹钟管理器不等待

时间:2015-10-22 15:08:46

标签: java android notifications alarmmanager

我尝试每20秒启动一个简单的方法,我的想法是再次使用此方法启动警报。要再次创建此类,其中执行该方法并启动另一个警报...依此类推 该方法本身应该创建一个通知。

public class CreateNotification extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {

        doStuff();

            NotificationCompat.Builder mNoteBuilder =
                    new NotificationCompat.Builder(context)
                            .setSmallIcon(R.drawable.icon)
                            .setContentTitle("...")
                            .setContentText(shownString)

            //get an instance of the notificationManager service
            NotificationManager mNotifyMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            //build the notification
            mNotifyMgr.notify(mNotificationID, mNoteBuilder.build());

            createNewAlarm(context);
    }

        private void createNewAlarm(Context context){
            Intent alarmIntent = new Intent(context, CreateNotification.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
            AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            manager.set(AlarmManager.RTC_WAKEUP, 20000, pendingIntent);
    }
}

这是从我的主要活动开始的:

    Intent alarmIntent = new Intent(this, CreateNotification.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
    AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
    manager.set(AlarmManager.RTC_WAKEUP, 4000, pendingIntent);

现在我的问题是,我没有得到预期的结果,每20秒就会收到一个新通知,但它会像处理器允许的那样快速创建所有时间通知。警报管理员之间没有中断,因为它没有安排任何事情,但只是立即创建课程。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+20000, pendingIntent);

您的解决方案:20000 = 1970. 1月1日0:00:20 所以你必须将你的millisec添加到当前时间。 (获得当前时间的另一种解决方案。)

Calendar calendar = Calendar.getInstance();
calendar.getTimeInMillis()+yourTimeInMillis;