Моя цель
Получать одно уведомление каждые 8 часов утра, когда мой переключатель активирован
Текущий результат
-Я получаю уведомление каждый раз, когда я запускаю приложение, если я впервые активировал переключатель
-Я также получаю уведомления без запуска приложения в любое время
-Кроме того, я получаю несколько уведомлений в одномдень
что я сделал (мой код)
-NotificationActivity (часть onCreate)
private void onClickSwitch() {
aSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
retrieveKeyWord();
retrieveCategories();
keywordPref = mPreferences.getString(PREF_KEYWORD, null);
categoriesPref = mPreferences.getString(PREF_CATEGORIES, null);
mPreferences.edit().putString(PREF_KEYWORD, keyword).apply();
mPreferences.edit().putString(PREF_CATEGORIES, categories).apply();
Calendar currentDate = Calendar.getInstance();
Calendar dueDate = Calendar.getInstance();
dueDate.set(Calendar.HOUR_OF_DAY, 8);
dueDate.set(Calendar.MINUTE, 0);
dueDate.set(Calendar.SECOND, 0);
if(dueDate.before(currentDate)) {
dueDate.add(Calendar.HOUR_OF_DAY, 24);
}
long timeDiff = dueDate.getTimeInMillis() - currentDate.getTimeInMillis();
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(NotificationWorker.class).setInitialDelay(timeDiff, TimeUnit.MILLISECONDS)
.setConstraints(constraints)
.addTag("TAG_OUTPUT").build();
WorkManager.getInstance().enqueue(oneTimeWorkRequest);
}
});
}
-NotificationActivity -> Layout
-NotificationWorker
public class NotificationWorker extends Worker {
private SharedPreferences mPreference;
private String keyword;
private String categories;
private ResultModel resultModel;
private ResultContract.Model.OnFinishedListener onFinishedListener;
private int numberOfArticle;
public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
mPreference = getApplicationContext().getSharedPreferences(NotificationActivity.PREFERENCE_FILE, MODE_PRIVATE);
keyword = mPreference.getString(NotificationActivity.PREF_KEYWORD, null);
categories = mPreference.getString(NotificationActivity.PREF_CATEGORIES, null);
resultModel = new ResultModel();
numberOfArticle = resultModel.getResultListWithoutDate(onFinishedListener, 1, keyword, categories);
displayNotification(keyword);
return Result.success();
}
private void displayNotification(String keyword) {
NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel("simplifiedcoding", "simplifiedcoding", NotificationManager.IMPORTANCE_DEFAULT);
assert notificationManager != null;
notificationManager.createNotificationChannel(channel);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), "simplifiedcoding")
.setContentTitle("Articles sur : " + keyword)
.setContentText("Nombre d'articles trouvés : " + numberOfArticle)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setSmallIcon(R.drawable.ic_launcher_background);
assert notificationManager != null;
notificationManager.notify(1, builder.build());
}
}
Скажите, если вам нужна дополнительная информация, спасибо, кто мне поможет