重复报警不准确

时间:2015-06-16 14:13:24

标签: java android eclipse alarmmanager

我制作了一个应用程序,其中有一个数字选择器,范围从1到60分钟,我将它连接到重复的警报管理器。当我试一试时,我注意到它有时不准确,要么需要更长的时间才能工作或更少。

可能是什么问题?

对于开始按钮:

startB.setOnClickListener(new OnClickListener()
     {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (startB.isChecked())
            {
            Calendar calSet = Calendar.getInstance();
            calSet.set(Calendar.MINUTE, picker2.getValue());
            calSet.set(Calendar.SECOND, 0);
            calSet.set(Calendar.MILLISECOND, 0);
            setAlarm(calSet);

            SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
            editor.putBoolean("toggleButton", startB.isChecked());
            editor.commit();
                timerHasStarted = true;

            }
        else
            {
            Intent intent = new Intent(getBaseContext(), MainReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
            AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(pendingIntent);

            SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
            editor.putBoolean("toggleButton", startB.isChecked());
            editor.commit();
                timerHasStarted = false;

            }
        }  
        });

警报:

private void setAlarm(Calendar targetCal ) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(getBaseContext(), MainReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
            targetCal.getTimeInMillis(), 
            TimeUnit.MINUTES.toMillis(picker2.getValue()),
            pendingIntent);
}

接收器:

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

         MediaPlayer m=MediaPlayer.create(context, R.raw.sound);
         m.start();

    }

1 个答案:

答案 0 :(得分:6)

Android操作系统能够移动警报,以最大限度地减少唤醒和电池消耗(自API 19起)。看看here。我注意到延迟几秒钟。

可以找到关于警报的非常好的教程here