Meine App macht Human Activity Recognition und benachrichtigt den Benutzer, wenn sie nicht aktiv genug sind. Ich lese die Daten des Beschleunigungsmessers in einem immer im Vordergrund laufenden Dienst. Momentan versuche ich, den Dienst zu starten und zu beenden, wenn der Benutzer schläft (z. B. legt der Benutzer das Intervall zwischen 20 und 8 Uhr fest), so dass der Dienst nach der angegebenen Zeit angehalten und wieder gestartet werden sollte. Momentan funktioniert der folgende Code nicht und ich bin mir nicht sicher warum. Irgendwelche Vorschläge, bitte?Zeitplan starten und stoppen eines Dienstes zu bestimmten Zeiten
Hinweis: Ich weiß, ich werde den Code wiederverwenden die Kalender-Instanz irgendwie, das ist nur für Debugging-Zwecke und es funktioniert zuerst.
Date startSleepingHours = mUser.getStartSleepingHours();
Date stopSleepingHours = mUser.getStopSleepingHours();
//Create alarm manager
AlarmManager alarmMgr0 = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
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, startSleepingHours.getHours());
cal.set(Calendar.MINUTE, startSleepingHours.getMinutes());
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 startServiceIntent = new Intent(ActiveMinutesActivity.this, IntentBroadcastedReceiver.class);
Intent stopServiceIntent = new Intent(ActiveMinutesActivity.this, IntentBroadcastedReceiver.class);
stopServiceIntent.putExtra("command", "STOP_SERVICE");
PendingIntent stopServicePIntent = PendingIntent.getService(ActiveMinutesActivity.this, 0, stopServiceIntent, 0);
PendingIntent startServicePIntent = PendingIntent.getService(ActiveMinutesActivity.this, 1, startServiceIntent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60 * 1000, stopServicePIntent);
Calendar cal2 = new GregorianCalendar();
cal2.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR));
cal2.set(Calendar.HOUR_OF_DAY, stopSleepingHours.getHours());
cal2.set(Calendar.MINUTE, stopSleepingHours.getMinutes());
cal2.set(Calendar.SECOND, cur_cal.get(Calendar.SECOND));
cal2.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND));
cal2.set(Calendar.DATE, cur_cal.get(Calendar.DATE));
cal2.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH));
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), 60 * 1000, startServicePIntent);
Und meine Empfängerklasse:
public class IntentBroadcastedReceiver extends BroadcastReceiver {
public IntentBroadcastedReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getExtras() != null){
if(intent.getExtras().get("command").equals("STOP_SERVICE")){
context.stopService(new Intent(context, ActiveMinutesService.class));
}else {
context.startService(new Intent(context, ActiveMinutesService.class));
}
}
}
}
ich weiß, es soll Kommentar sein, aber ich bin zu newebie :) –
Dies ist keine Antwort auf die Frage liefern. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/17660611) – alexi2
Vielen Dank für Ihren Vorschlag. Ja, ich habe den Empfänger im Manifest definiert. –