我正准备在每天晚上7点播放铃声,但是在其未决意图正在注册广播之后,它会立即播放铃声。
我在按钮点击时在前台调用了服务,并在onStartCommand中创建了待处理的意图:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
startForeground(FOREGROUND_ID,
buildForegroundNotification("DummyApp"));
c = Calendar.getInstance();
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int interval = 1000 * 60 * 60*24;
c.setTimeInMillis(System.currentTimeMillis());
c.set(Calendar.HOUR, 19);
c.set(Calendar.MINUTE,00);
manager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
interval, pendingIntent);
Intent alarmIntent = new Intent(AlarmService.this, DataProcessor.class);
pendingIntent = PendingIntent.getBroadcast(AlarmService.this, 0,
alarmIntent, 0);
return START_STICKY;
}
现在我在DataProcessor类接收数据处理器类的接收方法时播放铃声:
@Override
public void onReceive(Context ctx,Intent intent) {
playRIng(ctx);
}
但是,当我运行此代码时,单击按钮,服务已创建,但在调用AlarmService并且也播放铃声后立即触发警报。如何可能,因为我在注册广播时给出了准确的7 O时钟时间。? 谷歌搜索了很多,但只发现相同的代码,没有别的。每个代码都可以播放当时的铃声,但它也会在广播注册后立即播放铃声。
答案 0 :(得分:2)
为什么不使用条件?:
@Override
public void onReceive(Context ctx,Intent intent) {
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR);
if(hour==19)
{
playRIng(ctx);
}
}
答案 1 :(得分:2)
如果你在晚上9点运行该代码,你会告诉AlarmManager意图应该在2小时前第一次运行。
您需要检查日历时间是否落后于当前时间 如果是,您需要在日历中添加一天,以便明天晚上7点首先触发。
这样的事可能有用:
c = Calendar.getInstance();
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int interval = 1000 * 60 * 60 * 24;
// Not needed
// c.setTimeInMillis(System.currentTimeMillis());
c.set(Calendar.HOUR, 19);
c.set(Calendar.MINUTE, 00);
// ** Add this **
// Check if the Calendar 7pm is in the past
if (c.getTimeInMillis() < System.currentTimeMillis())
c.add(Calendar.DAY_OF_YEAR, 1); // It is so tell it to run tomorrow instead
manager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), interval, pendingIntent);
Intent alarmIntent = new Intent(AlarmService.this, DataProcessor.class);
pendingIntent = PendingIntent.getBroadcast(AlarmService.this, 0, alarmIntent, 0);
答案 2 :(得分:0)
您可以在开发人员网站上尝试使用该示例,了解可用的示例代码。可能代码中存在编程错误,但可用的示例代码正是您想要的。
答案 3 :(得分:0)
最好的方式,玩小时&amp;分钟的车
注意:请检查您的时间格式。在我的情况下,它是24小时甲酸盐
示例:
Calendar c = Calendar.getInstance();
//for 12 hr formate user int hour = c.get(Calendar.HOUR);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
//Log.e("time",""+hour+":"+minute);
if (hour == 10 && minute == 0 ) {
}