gpt4 book ai didi

android - 如何使用 WorkManager 和 OneTimeWorkRequest 在 Android 中的特定时间接收每日通知?

转载 作者:行者123 更新时间:2023-12-05 00:20:46 28 4
gpt4 key购买 nike

我的目标

当我的开关被激活时,每早上 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());

}
}

如果您需要更多信息,请告诉我,谢谢谁会帮助我

最佳答案

你可以用3种方法来解决它。

第一的:

用户警报管理器并将其放入检查 Activity 是否存在的 IF 中,因此如果您的应用程序打开,它将起作用。您可以从下面的谷歌文档链接中获取更多信息:

AlarmManager Docs

第二 :

您可以使用带有任务的计时器来创建通知,您可以检查 Activity 是否再次活跃,但更好的用途是在前台服务上创建计时器。

第三:

即使您需要,也可以使用来自服务器的 PushNotification。
文档和信息,如果链接如下:

Push Notification - One Signal

笔记:

我建议您使用第三种方式解决您的问题。

有好的编码,别忘了给我投票;)

关于android - 如何使用 WorkManager 和 OneTimeWorkRequest 在 Android 中的特定时间接收每日通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58388098/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com