2016-11-19 7 views
0

私は目覚まし時計のアプリケーションに取り組んでいます。私は1つの問題に直面しました。私は数日間警報を設定する方法を知らない。私はすでに以下のコードを試しましたが、ログで私はこれを見ましたWed Apr 06が火曜日と金曜日に最も近い日付になるように日付を変更しませんでした)。何が間違っていますか? 1日おきに別々にアラームを設定する必要がありますか?数日にアラームを設定する

これは私のコードです:

calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY); 
       //calendar.add(Calendar.DAY_OF_WEEK,Calendar.FRIDAY); 
       Log.e("Point_1","Calendar " + calendar.getTime()); 
       calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour()); 
       calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute()); 
       Intent intent1 = new Intent(MyService_alarm.this,MyReceiver_Alarm.class); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService_alarm.this,intent.getIntExtra("Size", 1),intent1,0); 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
       alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent); 

ありがとうございました。

答えて

0

あなたは時間ピッカーから時間と分を設定する前に、時間をログに記録されているため、ある

あなたのコードのSiが正常に機能しますが、あなたが移動する必要があなたのログにアラームに設定された時刻を表示しますあなたは数日間アラームを作っているので、すべてのセットを保存するのが賢明だろう。また

calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY); 
      //calendar.add(Calendar.DAY_OF_WEEK,Calendar.FRIDAY); 
      calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour()); 
      calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute()); 
      Log.e("Point_1","Calendar " + calendar.getTime()); 
      Intent intent1 = new Intent(MyService_alarm.this,MyReceiver_Alarm.class); 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService_alarm.this,intent.getIntExtra("Size", 1),intent1,0); 
      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
      alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent); 

:あなたのコードは次のようになりますので、あなたのピッカーから時間と分にカレンダーを設定した後にLog.eあなたのアラームがrでキャンセルされたのでデバイスが起動されたときを検出する受信機を追加するebootを実行し、再度追加する必要があります。

+0

ありがとうございました。残念ながら、問題は私が一気に数日間はアラームを設定できないということです。 – Steve

+1

数日間何を警告していますか?私はあなたが達成しようとしていることを理解していないようだ、あなたは複数の日にアラームを設定したいですか?そうであれば、毎日別々にアラームを設定する必要があります –

+0

Calendar.add(Calendar.DAY_OF_WEEK、Calendar.FRIDAY)とCalendar.add(Calendar.DAY_OF_WEEK、Calendar.SUNDAY)を追加してアラームを設定することはできません最近? – Steve

0

calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY, Calendar.FRIDAY); 

正しくありません。 documentationを見ると、そのような方法がないことがわかります。

Calendar.DAY_OF_WEEKと書くと、曜日として値を入力していることがわかります。しかし、1つの特定の日の代わりに2つを入力しています。 Calendarオブジェクトはの1つをの特定の日付に格納するために使用されます。

したがって、数日間アラームを設定するには、各アラームを別々に設定する必要があります。このため、オブジェクトを個別に作成するか、時間を変更してオブジェクトを再利用することができます。ただし、両方のアラームに対して同じ受信者クラスがあります。そのため、アラームマネージャで差別化するために、保留中の別のインテントを作成する必要があります。この理由から私は異なったrequest_codeの例を示しました。

calendar1.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); 
calendar2.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 

calendar1.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour()); 
calendar1.set(Calendar.MINUTE, timePicker.getCurrentMinute()); 

calendar2.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour()); 
calendar2.set(Calendar.MINUTE, timePicker.getCurrentMinute()); 

Intent intent1 = new Intent(MyService_alarm.this, MyReceiver_Alarm.class); 
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(MyService_alarm.this, 1, intent1, 0); 
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(MyService_alarm.this, 2, intent1, 0); 

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.setRepeating(AlarmManager.RTC, calendar1.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent1); 
alarmManager.setRepeating(AlarmManager.RTC, calendar2.getTimeInMillis(), 7 * 24 * 3600 * 1000, pendingIntent2); 
関連する問題