Android 根据EditText中的日期和时间选择器显示通知
我是android studio的新手,希望为用户指定的特定时间创建一个通知调度程序 然而,日期和时间对话框从EditText中选择,我设置了按钮来获取时间并按下通知。我被“设置”按钮上应该写的代码卡住了Android 根据EditText中的日期和时间选择器显示通知,android,notifications,alarmmanager,Android,Notifications,Alarmmanager,我是android studio的新手,希望为用户指定的特定时间创建一个通知调度程序 然而,日期和时间对话框从EditText中选择,我设置了按钮来获取时间并按下通知。我被“设置”按钮上应该写的代码卡住了 case R.id.setBtn: // stuck at here....// String text = dateTimeIn.getText().toString().trim(); if (
case R.id.setBtn:
// stuck at here....//
String text = dateTimeIn.getText().toString().trim();
if (text.isEmpty()) {
Toast.makeText(this, "Please select date and time", Toast.LENGTH_SHORT).show();
} else {
dateTimeIn.getText().toString().trim();
Toast.makeText(this, "Done!", Toast.LENGTH_SHORT).show();
}
break;
case R.id.cancelBtn:
alarmManager.cancel(alarmIntent);
Toast.makeText(this, "Canceled", Toast.LENGTH_SHORT).show();
break;
这是我的全部代码
private int notificationId = 1;
EditText dateTimeIn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jadwal_wc);
findViewById(R.id.setBtn).setOnClickListener(this);
findViewById(R.id.cancelBtn).setOnClickListener(this);
dateTimeIn = findViewById(R.id.dateTimeInput);
dateTimeIn.setInputType(InputType.TYPE_NULL);
dateTimeIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDateTimeDialog(dateTimeIn);
}
});
}
private void showDateTimeDialog(final EditText dateTimeIn) {
final Calendar calendar=Calendar.getInstance();
DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
TimePickerDialog.OnTimeSetListener timeSetListener=new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd-MM-yy HH:mm");
dateTimeIn.setText(simpleDateFormat.format(calendar.getTime()));
}
};
new TimePickerDialog(JadwalWc.this,timeSetListener,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),false).show();
}
};
new DatePickerDialog(JadwalWc.this,dateSetListener,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();
}
@Override
public void onClick(View view) {
EditText editText = findViewById(R.id.editText);
EditText dateTimeIn = findViewById(R.id.dateTimeInput);
Intent intent = new Intent(JadwalWc.this, AlarmReceiver.class);
intent.putExtra("notificationId", notificationId);
intent.putExtra("message", editText.getText().toString());
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
switch (view.getId()) {
case R.id.setBtn:
String text = dateTimeIn.getText().toString().trim();
if (text.isEmpty()) {
Toast.makeText(this, "Please select date and time", Toast.LENGTH_SHORT).show();
} else {
dateTimeIn.getText().toString().trim();
Toast.makeText(this, "Done!", Toast.LENGTH_SHORT).show();
}
break;
case R.id.cancelBtn:
alarmManager.cancel(alarmIntent);
Toast.makeText(this, "Canceled", Toast.LENGTH_SHORT).show();
break;
}
}
}
这是我的接收代码
private static final String CHANNEL_ID = "SAMPLE_CHANNEL";
@Override
public void onReceive(Context context, Intent intent) {
int notificationId = intent.getIntExtra("notificationId", 0);
String message = intent.getStringExtra("message");
Intent mainIntent = new Intent(context, TipsWc.class);
PendingIntent contentIntent = PendingIntent.getActivity(
context, 0, mainIntent, 0
);
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence channel_name = "My Notification";
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, channel_name, importance);
notificationManager.createNotificationChannel(channel);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID);
Uri soundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Bitmap picture = BitmapFactory.decodeResource(context.getResources(),R.drawable.notif2);
long vibrate[]={100,500,100,500};
builder.setSmallIcon(R.drawable.nssmall);
builder.setContentTitle("Your aquarium maintenance schedule");
builder.setLargeIcon(picture);
builder.setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(picture)
.bigLargeIcon(null));
builder.setContentText(message);
builder.setContentIntent(contentIntent);
builder.setPriority(NotificationCompat.PRIORITY_HIGH);
builder.setAutoCancel(true);
builder.setLights(Color.YELLOW, 200, 200);
builder.setSound(soundUri);
builder.setVibrate(vibrate);
notificationManager.notify(notificationId, builder.build());
}
}
退房您需要在
onTimeSet
中使用alarmManager.setExact
callback@aytek感谢您的回复,我将代码开关(view.getId()){case R.id.setBtn:Calendar cal=Calendar.getInstance();alarmManager.setExact(alarmManager.RTC_WAKEUP,cal.getTimeInMillis(),alarmIntent)
确实会出现通知,但没有安排,请签出。您需要在onTimeSet中使用alarmManager.setExact
callback@aytek感谢您的回复,我将代码开关(view.getId()){case R.id.setBtn:Calendar cal=Calendar.getInstance();alarmManager.setExact(alarmManager.RTC_WAKEUP,cal.getTimeInMillis(),alarmIntent);
确实会显示通知,但不会安排通知,