2017-02-28 10 views
0

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)); 
     } 
    } 

} 
} 

Antwort

0

Haben Sie IntentBroadcastedReceiver als Empfänger in AndroidManifest.xml definiert? das heißt:

<receiver android:name=".IntentBroadcastedReceiver "></receiver> 
+0

ich weiß, es soll Kommentar sein, aber ich bin zu newebie :) –

+0

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

+0

Vielen Dank für Ihren Vorschlag. Ja, ich habe den Empfänger im Manifest definiert. –

Verwandte Themen