android 中固定日期和时间的警报管理器
Alarm manager in a fixed date and time in android
我想构建一个 android 应用程序,它会在固定的日期和时间给我闹钟。对于日期,我使用日期选择器和时间选择器在文本字段中抽取时间。我已经通过关注合并了以毫秒为单位的日期和时间。
public void mergedt(){
String myDate = textDate.getText().toString();
String myTime = textTime.getText().toString();
String toParse = myDate + " " + myTime;
// viewtext.setText(toParse + " ");
try {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm");
Date date = formatter.parse(toParse);
millis = date.getTime();
viewtext.setText(millis + "");
//viewtext.setText(date + "");
} catch (ParseException pe) {
pe.printStackTrace();
}
}
我已经在
之后以毫秒为单位转换了当前日期和时间
long milliseconds = new GregorianCalendar().getTimeInMillis();
为了设置闹钟,我使用了以下代码
public void setAlarm(View view){
long interval = millis - milliseconds;
long time = new GregorianCalendar().getTimeInMillis() + interval;
Intent intent = new Intent(this,AlarmReceiver.class);
AlarmManager alarm_Manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm_Manager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT));
}
当我设置闹钟时,它会立即显示消息 "alarming" 它不会在固定的日期和时间显示闹钟。代码有什么问题,我该如何解决?
试试这个:在你的 mergedt()
try {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm a");
Date date = formatter.parse(toParse);
// millis = date.getTime();
Calendar calender_alarm.setTime(date);
millis=calender_alarm.getTimeInMillis();
viewtext.setText(millis + "");
//viewtext.setText(date + "");
} catch (ParseException pe) {
pe.printStackTrace();
}
获取您的当前时间:
Calendar calNow = Calendar.getInstance();
long current_time = calNow.getTimeInMillis();
现在查看闹钟时间:
if (millis > current_time) {
//call setAlarm() method
}
在您的 setAlarm() 方法中更改:
alarm_Manager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT));
至:
alarm_Manager.set(AlarmManager.RTC_WAKEUP,millis, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT));
将时间值更改为毫秒
您正在尝试从选择器中获取日期和时间值,因此您可以使用此 class。获取时间和日期并设置闹钟。
public class MainActivity extends AppCompatActivity {
public static int alarmHour, alarmMin, alarmDay, alarmYear, alarmMonth;
final static int RQS_1 = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void setDate(View view) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public void setTime(View view) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getSupportFragmentManager(), "timePicker");
}
public void setAlarm(View view) {
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, alarmHour);
calSet.set(Calendar.MINUTE, alarmMin);
calSet.set(Calendar.DAY_OF_MONTH, alarmDay);
calSet.set(Calendar.YEAR, alarmYear);
calSet.set(Calendar.MONTH, alarmMonth);
setAlarmN(calSet);
}
private void setAlarmN(Calendar targetCal) {
Toast.makeText(this, "Alarm is set at" + targetCal.getTime(),
Toast.LENGTH_LONG).show();
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
getBaseContext(), RQS_1, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
pendingIntent);
}
//date picker fragment
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
alarmDay = day;
alarmYear = year;
alarmMonth = month;
}
}
//Time picker fragment
public static class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user
alarmHour = hourOfDay;
alarmMin = minute;
}
}
}
我想构建一个 android 应用程序,它会在固定的日期和时间给我闹钟。对于日期,我使用日期选择器和时间选择器在文本字段中抽取时间。我已经通过关注合并了以毫秒为单位的日期和时间。
public void mergedt(){
String myDate = textDate.getText().toString();
String myTime = textTime.getText().toString();
String toParse = myDate + " " + myTime;
// viewtext.setText(toParse + " ");
try {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm");
Date date = formatter.parse(toParse);
millis = date.getTime();
viewtext.setText(millis + "");
//viewtext.setText(date + "");
} catch (ParseException pe) {
pe.printStackTrace();
}
}
我已经在
之后以毫秒为单位转换了当前日期和时间long milliseconds = new GregorianCalendar().getTimeInMillis();
为了设置闹钟,我使用了以下代码
public void setAlarm(View view){
long interval = millis - milliseconds;
long time = new GregorianCalendar().getTimeInMillis() + interval;
Intent intent = new Intent(this,AlarmReceiver.class);
AlarmManager alarm_Manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarm_Manager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT));
}
当我设置闹钟时,它会立即显示消息 "alarming" 它不会在固定的日期和时间显示闹钟。代码有什么问题,我该如何解决?
试试这个:在你的 mergedt()
try {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm a");
Date date = formatter.parse(toParse);
// millis = date.getTime();
Calendar calender_alarm.setTime(date);
millis=calender_alarm.getTimeInMillis();
viewtext.setText(millis + "");
//viewtext.setText(date + "");
} catch (ParseException pe) {
pe.printStackTrace();
}
获取您的当前时间:
Calendar calNow = Calendar.getInstance();
long current_time = calNow.getTimeInMillis();
现在查看闹钟时间:
if (millis > current_time) {
//call setAlarm() method
}
在您的 setAlarm() 方法中更改:
alarm_Manager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT));
至:
alarm_Manager.set(AlarmManager.RTC_WAKEUP,millis, PendingIntent.getBroadcast(this, 1,intent, PendingIntent.FLAG_UPDATE_CURRENT));
将时间值更改为毫秒
您正在尝试从选择器中获取日期和时间值,因此您可以使用此 class。获取时间和日期并设置闹钟。
public class MainActivity extends AppCompatActivity {
public static int alarmHour, alarmMin, alarmDay, alarmYear, alarmMonth;
final static int RQS_1 = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void setDate(View view) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public void setTime(View view) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getSupportFragmentManager(), "timePicker");
}
public void setAlarm(View view) {
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, alarmHour);
calSet.set(Calendar.MINUTE, alarmMin);
calSet.set(Calendar.DAY_OF_MONTH, alarmDay);
calSet.set(Calendar.YEAR, alarmYear);
calSet.set(Calendar.MONTH, alarmMonth);
setAlarmN(calSet);
}
private void setAlarmN(Calendar targetCal) {
Toast.makeText(this, "Alarm is set at" + targetCal.getTime(),
Toast.LENGTH_LONG).show();
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
getBaseContext(), RQS_1, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
pendingIntent);
}
//date picker fragment
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
alarmDay = day;
alarmYear = year;
alarmMonth = month;
}
}
//Time picker fragment
public static class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user
alarmHour = hourOfDay;
alarmMin = minute;
}
}
}