Как сделать уведомления по конкретному времени в Android?
Я делаю приложения для класса, там расписание уроков, расписание звонков, заметки для дз и калькулятор.
Мне надо сделать так чтобы уведомления выводились по определенному времени. То есть например: До урока осталось 5 мин или Урок закончится через 2 минуты
Я смотрел все статьи на похожую тему, но не и понял, так как плохо в чтении кода и не понимаю что к чему.
Вот код класса "Расписание звонков" там я реализовываю уведомления:
package com.example.list;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import static androidx.core.app.NotificationCompat.PRIORITY_HIGH;
public class ScheduleOfCalls extends AppCompatActivity {
private NotificationManager notificationManager;
private static final int NOTIFY_ID = 1;
private static final String CHANNEL_ID = "Расписание Звонков";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.schedule_of_calls);
notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), ScheduleOfCalls.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
.setAutoCancel(false)
.setSmallIcon(R.drawable.ic_notif_icon_tson)
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)
.setContentTitle("Расписание Звонков")
.setContentText("Осталось 5 мин до урока")
.setPriority(PRIORITY_HIGH);
createChannelIfNeeded(notificationManager);
notificationManager.notify(NOTIFY_ID, notificationBuilder.build());
}
});
}
public static void createChannelIfNeeded(NotificationManager manager) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_ID, NotificationManager.IMPORTANCE_DEFAULT);
manager.createNotificationChannel(notificationChannel);
}
}
public void Button_back(View view) {
onBackPressed();
}
public void Button_AA(View view) {
Intent AA = new Intent(ScheduleOfCalls.this, AboutApp.class);
startActivity(AA);
}
}
В коде я использовал кнопку, но её я уберу. Так что на кнопку не обращайте внимание.
Я буду благодарен, если вы будете объяснять примером кода, а не типа вот эту функцию туда, это сюда и т.д.
Ответы (2 шт):
Я смогу только дать подсказку, куда нужно копать. А копать нужно в сторону WorkManager.
Создаёте какую то задачу в WorkManager'е