Я пытаюсь создать приложение, в котором пользователь может установить дату и время для своих задач. Как только пользователь определит свою задачу и выйдет из приложения, он должен получить уведомление от приложения о задаче, которую он определил в приложении. Ниже приведен фрагмент кода, который я пробовал.
todocreate. java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_todo_create);
getSupportActionBar().setTitle("ToDoList Create");
myToDoHelper = new myDBHelper(todo_create.this);
titleText = (EditText)findViewById(R.id.getTitle);
dateText = (EditText)findViewById(R.id.getDate);
timeText = (EditText)findViewById(R.id.getTime);
pickDate = (Button)findViewById(R.id.pickDate);
pickTime = (Button)findViewById(R.id.pickTime);
c = Calendar.getInstance();
pickDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDay = c.get(Calendar.DAY_OF_MONTH);
mMonth = c.get(Calendar.MONTH);
mYear = c.get(Calendar.YEAR);
DatePickerDialog datePickerDialog = new DatePickerDialog(todo_create.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
dateText.setText(dayOfMonth +"-"+(month+1)+"-"+year);
c.set(Calendar.DAY_OF_MONTH,dayOfMonth);
c.set(Calendar.MONTH,month+1);
c.set(Calendar.YEAR,year);
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
});
pickTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(todo_create.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
timeText.setText(hourOfDay +":"+minute);
c.set(Calendar.HOUR_OF_DAY,hourOfDay);
c.set(Calendar.MINUTE,minute);
c.set(Calendar.SECOND,0);
c.set(Calendar.MILLISECOND,0);
}
}, mHour, mMinute, false);
timePickerDialog.show();
}
});
}
//function to save todo task with alarm manager
public void saveToDo(String todoTaskInput, String todoDateInput, String todoTimeInput){
//createNotification(todoTaskInput);
boolean isInserted = myToDoHelper.createToDo(todoTaskInput, todoDateInput,todoTimeInput);
if(isInserted == true){
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent alarmShowIntent = new Intent(this, BroadcastReceiver.class);
alarmShowIntent.putExtra("TodoTitle",todoTaskInput);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,alarmShowIntent,0);
Calendar c1 = Calendar.getInstance();
long currentTime = c1.getTimeInMillis();
alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis()-currentTime,pendingIntent);
Toast.makeText(getApplicationContext(),"ToDo Item created successfully",Toast.LENGTH_LONG).show();
}else {
Toast.makeText(getApplicationContext(),"Error occured ! Please try again after sometime",Toast.LENGTH_LONG).show();
}
this.finish();
}
BroadcastManager. java
package com.example.mytodoapp;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import java.io.Console;
public class BroadcastManager extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
createNotification(context,intent,"myToDo App",intent.getStringExtra("TodoTitle"));
}
public void createNotification(Context context,Intent intent,CharSequence ticker, CharSequence title){
//Intent intent = new Intent(this,todo_home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent,0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"todoAppChannel");
builder.setSmallIcon(R.drawable.ic_note_add_black_24dp);
builder.setContentTitle("todo App");
builder.setContentText(title);
builder.setPriority(NotificationCompat.PRIORITY_DEFAULT);
builder.setContentIntent(pendingIntent);
builder.setAutoCancel(true);
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
notificationManagerCompat.notify(200,builder.build());
}
}
home. java Создан следующий метод для создания канала уведомлений при загрузке приложения.
public void createNotificationChannel(){
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
CharSequence name = "todoAppChannel";
String description = "temp";
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel("todoAppChannel",name,importance);
channel.setDescription(description);
NotificationManager manager = getSystemService(NotificationManager.class);
manager.createNotificationChannel(channel);
}
}
AndroidManifest. xml Следующая строка обновлен в файле.
<receiver android:name=".BroadcastManager"/>
Мне удалось создать уведомление по нажатию кнопки, но не по указанной c дате в указанное время c. Однако я не могу генерировать уведомления для определенной c даты в указанное c время. В чем может быть проблема.