我制作了一个具有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();

    }

最佳答案

Android OS能够转移警报,以最大程度地减少唤醒和电池消耗(自API 19开始)。看看here。我注意到延迟可能长达几秒钟。

可以在here上找到有关警报的相当不错的教程

10-07 12:10
查看更多