我开始寻找在每个小时的时间正好重复的开始IntentService(下午1:00,下午2:00,下午3:00,等等) 。正是在小时开始启动服务,重复每隔一小时之后
说完看了看文件,我相信使用AlarmManager做,这是最好的做法。
我有一个BootReceiver将开始第一个实例,并在下面的应用我onHandleIntent任务已经重复(例如振动下)之后的下一个闹钟设置。我的问题是我无法设置闹钟在接下来的一个小时的顶上去了,我怎么会去吗?
为了测试我有报警器响了每3分钟在下面的代码
public class TimingAndControl extends IntentService
{ public TimingAndControl()
{
super(TimingAndControl.class.getSimpleName());
}
@Override
protected void onHandleIntent(Intent intent)
{
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "VibrateTag");
wakeLock.acquire();
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(300);
NextAlarm();
}
private void NextAlarm()
{
Intent intent = new Intent(this, this.getClass());
PendingIntent pendingIntent =
PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// The update frequency should often be user configurable. This is not.
long currentTimeMillis = System.currentTimeMillis();
long nextUpdateTimeMillis = currentTimeMillis + 3 * (60 * 1000);
Time nextUpdateTime = new Time();
nextUpdateTime.set(nextUpdateTimeMillis);
if (nextUpdateTime.hour < 6 || nextUpdateTime.hour >= 18)
{
nextUpdateTime.hour = 8;
nextUpdateTime.minute = 0;
nextUpdateTime.second = 0;
nextUpdateTimeMillis = nextUpdateTime.toMillis(false) + DateUtils.DAY_IN_MILLIS;
}
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, nextUpdateTimeMillis, pendingIntent);
}
@Override
public void onCreate(){
Toast.makeText(this, "service starting", (10 * 1000)).show();
super.onCreate();
}
@Override
public void onDestroy() {
Toast.makeText(this, "service stopping", (10 * 1000)).show();
super.onDestroy();
}
}
服务需要在每个小时的顶部完全触发,我是否能够通过这样做来保持我需要的准确性。此外,我怎么会去计算时间时的下一个顶部是的,我会是最好的送行发言权12:00 PM设置一个报警,并从那里重复报警?抱歉,我发现AlarmManager很难与 – user1001160 2012-01-11 13:08:47
@ user1001160握手:“我能否通过这样做来保持我需要的准确性” - 如果您使用“RTC_WAKEUP”或“ELAPSED_REALTIME_WAKEUP”,它会相当准确'。话虽这么说,Android是不是一个RTOS和时钟漂移等。“此外,我将如何去计算何时小时的下一个顶部是” - 使用'java.util.Calendar',因为这是普通的Java,没什么Android独有。 “我会最好在下午12点设置下一个闹钟,并从那里重复闹钟?” - 我肯定会在这个场景中使用'setRepeating()'。 – CommonsWare 2012-01-11 13:40:12
太好了,我想我已经想通了。感谢您的帮助! – user1001160 2012-01-11 16:30:32