К сожалению, Android не позволяет мне помещать Worker как вложенный класс в мою функцию MainActivity, и поэтому я не могу получить доступ к экземплярам NotificationManagerCompat и NotificationCompat.Builder, как указано выше.
Почему вам нужно добавить свой класс NotificationWorker
в MainActivity
?
. Как вы упомянули, вы просто хотите получить доступ к NotificationManagerCompat
и NotificationCompat.Builder
из класса Worker
, и нет ограничение для этого, поэтому для создания вашего уведомления у вас уже есть контекст, переданный конструктору класса Worker
, а также вы все равно можете вызвать getApplicationContext()
из класса Worker
. Я проверил это без проблем.
Надеюсь, это поможет. Я приветствую вас, если у вас есть какие-либо вопросы.
Обновление
В моем классе Worker я хотел получить доступ к созданным экземплярам notificationManagerCompat
и notificationBuilder
в MainActivity
.
Вам не нужно создавать notificationManagerCompat
& notificationBuilder
экземпляров в MainActivity
, вы обычно можете создавать их в NotificationWorker
Здесь это демо из вашего кода
public class NotificationWorker extends Worker {
private final NotificationManagerCompat notificationManagerCompat;
private final NotificationCompat.Builder notificationBuilder;
public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
PendingIntent pendingIntent = PendingIntent.getActivity
(context, 0, new Intent(context, MainActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT);
notificationBuilder =
new NotificationCompat.Builder(getApplicationContext(), warnotifier_notification_channel)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(notificationTitle)
.setContentText(notificationText)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_LOW)
.setOngoing(true);
notificationManagerCompat = NotificationManagerCompat.from(getApplicationContext());
}
@NonNull
@Override
public Result doWork() {
Calendar calendar = new GregorianCalendar();
String notificationText = "Time: " + calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND);
notificationBuilder.setContentText(notificationText);
notificationManagerCompat.notify(1, notificationBuilder.build());
return Result.success();
}
}
. Вы можете получить notificationTitle
, notificationText
из res / string с помощью R.string.XX и notification_icon
из res / drawable с помощью R.drawable. XX.
С этим вы можете использовать NotificationManagerCompat
и NotificationCompat.Builder
от вашего работника, все, что вам нужно, только контекст, не нужно никаких действий.
надеюсь, что это ответ на ваш вопрос.