2017-04-03 12 views
0
public class setAlarm extends AppCompatActivity { 

final Calendar setat = Calendar.getInstance(); 
Calendar[] calendar = new Calendar[8]; 

public void dimensions(){ 
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 

    int width = dm.widthPixels; 
    int height = dm.heightPixels; 

    getWindow().setLayout((int) (width * 0.62), (int) (height * 0.4)); 
} 

public void clock(){ 
    final TextView ora = (TextView)findViewById(R.id.clock); 
    findViewById(R.id.clock).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final Calendar time = Calendar.getInstance(); 
      int hour = time.get(Calendar.HOUR_OF_DAY); 
      int minute = time.get(Calendar.MINUTE); 

      TimePickerDialog timePickerDialog; 
      timePickerDialog = new TimePickerDialog(setAlarm.this, new TimePickerDialog.OnTimeSetListener(){ 
       @Override 
       public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute){ 
        ora.setText(selectedHour + ":" + selectedMinute); 
        setat.set(Calendar.HOUR_OF_DAY, selectedHour); 
        setat.set(Calendar.MINUTE, selectedMinute); 
       } 
      }, hour, minute, true); 
      timePickerDialog.setTitle("Select Time"); 
      timePickerDialog.show(); 
     } 
    }); 
} 

public void alarm(){ 
    clock(); 
    findViewById(R.id.confirm).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      CheckBox[] boxes = new CheckBox[8]; 
      boxes[0] = (CheckBox)findViewById(R.id.check0); 
      boxes[1] = (CheckBox)findViewById(R.id.check1); 
      boxes[2] = (CheckBox)findViewById(R.id.check2); 
      boxes[3] = (CheckBox)findViewById(R.id.check3); 
      boxes[4] = (CheckBox)findViewById(R.id.check4); 
      boxes[5] = (CheckBox)findViewById(R.id.check5); 
      boxes[6] = (CheckBox)findViewById(R.id.check6); 

      if(boxes[0].isChecked()) {setAlarm(1);} 
      if(boxes[1].isChecked()) {setAlarm(2);} 
      if(boxes[2].isChecked()) {setAlarm(3);} 
      if(boxes[3].isChecked()) {setAlarm(4);} 
      if(boxes[4].isChecked()) {setAlarm(5);} 
      if(boxes[5].isChecked()) {setAlarm(6);} 
      if(boxes[6].isChecked()) {setAlarm(7);} 

      Toast.makeText(setAlarm.this, "Alarm has been set!", Toast.LENGTH_SHORT).show(); 
      //finish(); 
     } 
    }); 

} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.alarm); 
    dimensions(); 
    alarm(); 
} 

public void setAlarm(int day){ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.DAY_OF_WEEK, day); 
    calendar.set(Calendar.HOUR_OF_DAY, setat.get(Calendar.HOUR_OF_DAY)); 
    calendar.set(Calendar.MINUTE, setat.get(Calendar.MINUTE)); 
    calendar.set(Calendar.SECOND, 0); 

    long time = calendar.getTimeInMillis() - Calendar.getInstance().getTimeInMillis(); 

    Log.d("day", String.valueOf(day)); 
    Log.d("time", String.valueOf(setat.get(Calendar.HOUR_OF_DAY)) + ":" + String.valueOf(setat.get(Calendar.MINUTE))); 
    Log.d("actual", String.valueOf(Calendar.getInstance().get(Calendar.MINUTE))); 

    Intent intent = new Intent(getApplicationContext(), NotificationService.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE); 

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
} 
} 

アラームを指定した時間と分で設定したい場合は、選択した日に毎週アラームを繰り返す必要があります。問題は、アラームを確認した後、選択した時刻に即時に発砲しているかどうかです。私は前にこの問題を調査しましたが、私にとって役に立つものは何も見つかりませんでした。Androidのアラームは即時に起動します

答えて

0

アラームがすぐに発生している場合は、おそらく時間が過去ではなく未来​​であると考えられます。 calendar.getTimeInMillis()System.currentTimeMillis()より大きい(あなたのalarmメソッドで)ことを確かめて、そうでない場合は適切にカレンダーインスタンスを調整してください。

+0

'System.currentTimeMillis()'が 'calendar.getTimeInMillis()'より大きければどうすればいいですか? –

+0

それはあなたが必要とする特定のタイミングに依存するでしょう:私のアプリケーションで私のアラームは毎日ですので、私の計算が私に過去の数を与えるならば、私はミリ秒単位で1日を追加してからそれを使用します。 – Femi

関連する問題