我想根据用户输入和显示通知设置闹钟。 我不知道出了什么问题,因为我的闹钟无法正常工作。
下面是我的代码:
这是我设置警报的地方
public class AppointmentAdd extends Activity{
private SQLiteDatabase database;
private DBHelper helper;
private Spinner spinner1;
Button btnSave, btnDate, btnTime, btnCancel;
EditText addDoctor;
DateFormat fmtDateAndTime = DateFormat.getDateTimeInstance();
Calendar myCalendar = Calendar.getInstance();
SimpleDateFormat mSDF = new SimpleDateFormat("hh:mm a");
DatePickerDialog.OnDateSetListener d = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
updateLabelDate(year, monthOfYear, dayOfMonth);
}
};
TimePickerDialog.OnTimeSetListener t = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
myCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
myCalendar.set(Calendar.MINUTE, minute);
updateLabelTime(hourOfDay, minute);
}
};
private void updateLabelDate(int year, int monthOfYear,
int dayOfMonth) {
year = myCalendar.get(Calendar.YEAR);
monthOfYear = myCalendar.get(Calendar.MONTH);
dayOfMonth = myCalendar.get(Calendar.DATE);
btnDate.setText(new StringBuilder().append(dayOfMonth).append(".")
.append(monthOfYear + 1).append(".").append(year).append(" "));
}
private void updateLabelTime(int hourOfDay, int minute) {
hourOfDay = myCalendar.get(Calendar.HOUR_OF_DAY);
minute = myCalendar.get(Calendar.MINUTE);
String time = mSDF.format(myCalendar.getTime());
btnTime.setText(new StringBuilder().append(time));
}
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.add_app);
btnSave = (Button)findViewById(R.id.btn_save);
btnCancel = (Button)findViewById(R.id.btn_cancel);
btnDate = (Button)findViewById(R.id.btn_date);
btnTime = (Button)findViewById(R.id.btn_time);
spinner1 = (Spinner)findViewById(R.id.spin_event);
addDoctor = (EditText)findViewById(R.id.edit_doctor);
btnDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new DatePickerDialog(AppointmentAdd.this, d, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show();
}
});
btnTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new TimePickerDialog(AppointmentAdd.this, t, myCalendar
.get(Calendar.HOUR_OF_DAY), myCalendar
.get(Calendar.MINUTE), true).show();
}
});
helper = new DBHelper(this);
database = helper.getWritableDatabase();
spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
String list = spinner1.getSelectedItem().toString();
spinner1.setTag(list);
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String purpose = spinner1.getTag().toString();
String date = btnDate.getText().toString();
String time = btnTime.getText().toString();
String doctor = addDoctor.getText().toString();
helper.insertDataAppointment(database, date, time, purpose, doctor);
Toast.makeText(AppointmentAdd.this, "Successfully Add", Toast.LENGTH_SHORT).show();
setAlarm(myCalendar.get(Calendar.HOUR_OF_DAY), myCalendar.get(Calendar.MINUTE),
myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH));
Intent i = new Intent(AppointmentAdd.this, Appointment.class);
startActivity(i);
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity (new Intent(getApplicationContext(), Appointment.class));
}
});
updateLabelDate(0, 0, 0);
updateLabelTime(0, 0);
}
private void setAlarm(int Hour, int Minute, int year, int monthOfYear, int dayOfMonth){
String name = addDoctor.getText().toString();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, monthOfYear);
cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
cal.set(Calendar.HOUR_OF_DAY, Hour);
cal.set(Calendar.MINUTE, Minute);
String time = mSDF.format(cal.getTime());
//in case of choosing a previous hour, then set alarm to next day
if (cal.getTimeInMillis() < System.currentTimeMillis())
cal.set(year, monthOfYear, dayOfMonth, Hour + 24, Minute);
Intent intent = new Intent(this, Notify.class);
intent.putExtra("name",name);
intent.putExtra("hour", Hour);
intent.putExtra("minute", Minute);
final int _id = (int) System.currentTimeMillis();
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(),
_id, intent, PendingIntent.FLAG_UPDATE_CURRENT| Intent.FILL_IN_DATA);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()-(3*60*60*1000),pendingIntent );
Toast.makeText(this, "Notification set for: "+ dayOfMonth +"/"+ (monthOfYear+1) +"/"+ year
+ "," + time, Toast.LENGTH_SHORT).show();
}
}
这是我的通知类
public class Notify extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
int icon = R.drawable.ic_launcher;
CharSequence tickerText = "Hello it is time for your appoinment";
long when = System.currentTimeMillis();
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(2000);
CharSequence contentTitle = "My notification";
CharSequence contentText = "Appointment with Dr " + intent.getStringExtra("name");
final int NOTIF_ID = 1234;
NotificationManager notofManager = (NotificationManager)context. getSystemService(Context.NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(context, Appointment.class);
PendingIntent contentIntent = PendingIntent.getActivity(context,1234, notificationIntent, 0);
Notification notification = new Notification(icon, tickerText,when );
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.flags = Notification.FLAG_INSISTENT;
notification.defaults |= Notification.DEFAULT_SOUND;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notofManager.notify(NOTIF_ID,notification);
}
}
请帮帮我。当我运行时,似乎,当呼叫意图时,它不会通知类
答案 0 :(得分:0)
首先,确保注册BroadcastReceiver。我将在清单中注册为
<application ... >
...
<receiver android:name="Notify"></receiver>
</application>
现在,请注意日历。请注意,MONTH从零开始。因此,要在8月设置闹钟,请将MONTH设置为7.我建议在设置闹钟之前包含日志跟踪,
AlarmManager alarmManager =(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Log.d("Nzm", "Setting alarm on:"+cal.getTime().toLocaleString());// use either Log or Toast
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent);