我已经在启动完成时在android的9:00 AM启动了警报。但是在完成启动后每分钟都会发出警报。
我的要求是它应该在启动后设置警报,但仅在上午9:00触发警报。
这是我的代码: 公共类AlarmUtil { private PendingIntent alarmIntent;
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);
}
}
}
服务(我的服务类)
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();
}
}
我缺乏的地方。请帮我。提前谢谢。
答案 0 :(得分:5)
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);
通过调用setRepeating()
,您指示它每分钟触发一次意图。您可能打算使用set()
或setExact()
代替。
此外,您还要在当前日期<9> 设置闹钟。我不完全确定你的目标是什么,但是如果你想要接下来9:00&#34; (例如作为闹钟)如果当前时间大于9:00,您应该添加一天。来自文档:
如果声明的触发时间是过去的,则会触发警报 立即
编辑:如果你需要的是每天9点发出此闹钟,那么setRepeating()
是正确的,但是以毫秒为单位的时间应该是是AlarmManager.INTERVAL_DAY
。但请注意有关过去警报的说明。如果您在上午10:00启动手机,并且使用当前代码,除了未来之外,您还会收到立即警报。
并且,正如@DerGolem所指出的那样,如果您将API级别19定位,那么这些警报将是不精确的(并且没有setRepeatingExact()
)。如果您需要完全警报,那么您必须安排一个setExact()
,然后安排下一个警报,依此类推。
答案 1 :(得分:1)
你需要更换&#34; 1 * 60 * 1000&#34;使用AlarmManager.INTERVAL_DAY进行日常设置
答案 2 :(得分:1)
您好我使用了以下代码并且能够在每天上午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);