我已经在android启动完成时启动了上午9:00的闹钟。但开机完成后每分钟报警一次。
我的要求是它应该在启动后设置警报,但只在上午9点设置火灾警报。
下面是我的代码:公共类alarmmutil {private PendingIntent;public static void setAlarm(Context context) {
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);
calendar.set(Calendar.AM_PM, Calendar.AM);
//calendar.setTimeInMillis(calendar.getTimeInMillis());
calendar.add(Calendar.SECOND, 1);
Intent intent = new Intent(context, Services.class);
PendingIntent pintent = PendingIntent.getService(context, 123456789,
intent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);
}
}
public class AlarmBroadcastReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Toast.makeText(context, "Booted!", Toast.LENGTH_SHORT).show();
AlarmUtil.setAlarm(context);
}
}
}
services (My service Class)
public class Services extends IntentService {
public Services(String name) {
super("services");
// TODO Auto-generated constructor stub
}
public Services() {
super("services");
// TODO Auto-generated constructor stub
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
MyApp.counter += 1;
Toast.makeText(getApplicationContext(),
"Service started: " + MyApp.counter, Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onHandleIntent(Intent intent) {
Toast.makeText(getApplicationContext(), "handling intent",
Toast.LENGTH_LONG).show();
}
}
我所欠缺的地方。请帮帮我。
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);
通过调用setRepeating()
,您指示它每分钟触发一次意图。您可能想用set()
或setExact()
代替。
另外,您将闹钟设置为当前日期的9:00 。我不太确定你的目标是什么,但如果你想要一个"下一个9点"的闹钟(即作为闹钟),你可能应该在当前时间大于9点时添加一天。来自文档:
如果设置的触发时间已经过去,则会触发告警立即.
EDIT:如果您需要的是在每天9:00触发此警报,则setRepeating()
是正确的,但以毫秒为单位的时间应该是AlarmManager.INTERVAL_DAY
。不过,要注意关于过去警报的说明。如果你在上午10点启动手机,并且使用当前代码,除了未来的警报外,你还会收到一个即时警报。
并且,正如@DerGolem指出的那样,如果您的目标是API级别19,那么这些警报将是不准确的(并且没有setRepeatingExact()
)。如果您需要精确的警报,那么您必须使用setExact()
安排一个警报,然后在该警报触发时安排下一个警报,依此类推。
你好,我使用了下面的代码,能够在每天早上9点生成闹钟
alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmService.class);
PendingIntent pintent = PendingIntent.getService(this, 123456789,
intent, 0);
// Set the alarm to start at 8:30 a.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 00);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1000 * 60 * 1 * 60 * 24, pintent);
需要将"1 * 60 * 1000"替换为AlarmManager。