2017-02-28 29 views
0

私のアプリはヒューマンアクティビティ認識を実行しており、十分にアクティブでない場合にユーザーに通知しています。私は常に実行中の前景サービスで加速度計のデータを読んでいます。私が睡眠中にサービスを開始および停止しようとしている(たとえば、ユーザーが睡眠時間間隔を午後8時から午前8時に設定している)ので、指定された時間後にサービスを停止して再び開始する必要があります。現在、次のコードは機能しません。理由はわかりません。何か提案してください。特定の時間にサービスの開始と停止をスケジュールする

注:コードを何らかの形で再利用するようにしています。これはデバッグの目的であり、最初に動作させるためのものです。

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

そして、私のレシーバークラス:

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

} 
} 

答えて

0

あなたはAndroidManifest.xmlに設定レシーバとしてIntentBroadcastedReceiverを定義していますか?すなわち

+0

私はそれがコメントであることを知っていますが、私はあまりにも新鮮です:) –

+0

これは質問への回答を提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューの投稿](レビュー/低品質の投稿/ 17660611) – alexi2

+0

ありがとうございます。はい、私はマニフェストで受信機を定義しました。 –

関連する問題