Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 服务在特定时间运行_Android_Android Intent_Android Service_Alarmmanager_Android Alarms - Fatal编程技术网

Android 服务在特定时间运行

Android 服务在特定时间运行,android,android-intent,android-service,alarmmanager,android-alarms,Android,Android Intent,Android Service,Alarmmanager,Android Alarms,我尝试每天只在特定时间运行服务, 假设每天早上8点 在这里我发现了两种方法 public static void setScheduleMessage(Context context, int hours, int minuts, int seconds) { Calendar calendar = Calendar.getInstance(); // 8 AM calendar.set(Calendar.HOUR_OF_DAY, hours);

我尝试每天只在特定时间运行服务, 假设每天早上8点 在这里我发现了两种方法

public static void setScheduleMessage(Context context, int hours,
        int minuts, int seconds) {
    Calendar calendar = Calendar.getInstance();
    // 8 AM
    calendar.set(Calendar.HOUR_OF_DAY, hours);
    calendar.set(Calendar.MINUTE, minuts);
    calendar.set(Calendar.SECOND, seconds);
    PendingIntent pendingIntent = PendingIntent.getService(context, 0,
            new Intent(context, MessageSchduledService.class),
            PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
            pendingIntent);
}
但这种方法的问题是,它在指定时间后每小时运行一次

这是我使用的第二种方法,它不执行我的服务

public static void setScheduleMessage2(Context context, int hours,
        int minuts, int seconds) {
    Calendar cur_cal = new GregorianCalendar();
    cur_cal.setTimeInMillis(System.currentTimeMillis());// set the current

     // time and date for

     // this calendar
    Calendar cal = new GregorianCalendar();
    cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR));
    cal.set(Calendar.HOUR_OF_DAY, hours);
    cal.set(Calendar.MINUTE, minuts);
    cal.set(Calendar.SECOND, cur_cal.get(Calendar.SECOND));
    cal.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND));
    cal.set(Calendar.DATE, cur_cal.get(Calendar.DATE));
    cal.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH));
    Intent intent = new Intent(context, MessageSchduledService.class);

    PendingIntent pintent = PendingIntent.getService(context, 0, intent, 0);
    AlarmManager alarm = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);

    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, pintent);

} 
职位: 在我的应用程序中,我只想在每天的特定时间将消息从我的应用程序数据库推送到消息数据库。 如果有人对此有什么想法,请告诉我这些方法中我做错了什么?

看看
@RTC示例

// Set the alarm to start at approximately 2:00 p.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14);

// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY, alarmIntent);

在代码中

alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, pintent);
替换

AlarmManager.INTERVAL\u DAY

24*60*60*1000


。这意味着在24小时后重复报警

谢谢Vinay,如果我每天设置上述报警,我还有一个问题要问。后来我重启了我的设备,它是否每天都能正常工作?或者我需要引导完成广播并再次设置警报?需要引导完成广播并再次设置警报,您可以在共享首选项中节省时间。因此,如果使用setInexactRepeating()不能自己指定时间,而必须使用间隔常数?@Mafro34-不必-您可以在此处参考文档