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のアラームは即時に起動します
'System.currentTimeMillis()'が 'calendar.getTimeInMillis()'より大きければどうすればいいですか? –
それはあなたが必要とする特定のタイミングに依存するでしょう:私のアプリケーションで私のアラームは毎日ですので、私の計算が私に過去の数を与えるならば、私はミリ秒単位で1日を追加してからそれを使用します。 – Femi