java如何使用Work Manager在以后显示通知
我正在努力了解如何在特定时间显示通知,我知道我可以使用workmanager来实现这一目的,并且它将选择正确的方法来完成工作(在本例中,显示通知),即使应用程序关闭或设备重置等
现在我有了一个测试方法来安排通知,如果应用程序正在运行,而作业应该运行,那么一切都正常,但如果我的应用程序在此之前被杀死,那么通知将不会显示,直到我再次打开应用程序
我想了解为什么应用关闭时通知不显示,以及如何让work Manager在应用关闭时运行作业
工人:
public class WorkerNext extends Worker {
public Result doWork() {
Result workResult=Result.FAILURE;
int workType=getInputData().getInt(DATA_KEY_WORK_TYPE,WORK_TYPE1);
switch (workType)
{
case WORK_TYPE1:
workResult=doWorkUpdate();
break;
case WORK_TYPE_SHOW_NOTIFICATION:
workResult=doWorkShowNotification();
break;
default:
workResult=doWorkUpdate();
break;
}
return workResult;
}
private Result doWorkShowNotification() {
showHagralaDetailsNotification();
scheduleNotifications();
return Result.SUCCESS;
}
public void showHagralaDetailsNotification()
{
Context context=MyApp.getApplication().getApplicationContext();
Notification.Builder builder = new Notification.Builder(context)
.setContentTitle(context.getString(R.string.Notification_NextHagralaTitle))
.setContentText(NextHagralaDetails.toNotificationText())
.setAutoCancel(true)
.setSmallIcon(R.mipmap.ic_launcher_foreground)
.setLargeIcon(((BitmapDrawable) context.getResources().getDrawable(R.mipmap.ic_launcher)).getBitmap())
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
Notification notification = builder.getNotification();
NotificationManager manager=(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NOTIFICATION_ID_HAGRALA_DETAILS,notification);
}
private void scheduleNotifications()
{
long delay=calculateNextNotificationsDelay();
if (delay!=MyConfig.ALERT_NONE)
{
ExistingWorkPolicy workPolicy=ExistingWorkPolicy.REPLACE;
Data data=new Data.Builder().putInt(WorkerNextHagrala.DATA_KEY_WORK_TYPE,
WorkerNextHagrala.WORK_TYPE_SHOW_NOTIFICATION).build();
Log.d("GABI","scheduleUpdateNextNotifications - delay:"+delay);
OneTimeWorkRequest request=new OneTimeWorkRequest.Builder(WorkerNextHagrala.class).
setInitialDelay(delay, TimeUnit.MILLISECONDS).setInputData(data).build();
WorkManager.getInstance().beginUniqueWork(WORK_NAME_SHOW_NOTIFICATION,workPolicy ,request).enqueue();
}
}
}
测试方法-(从现在起1分钟内安排通知):
public void showNotification(View view) {
long delay=60000;
if (delay!=MyConfig.ALERT_NONE)
{
ExistingWorkPolicy workPolicy=ExistingWorkPolicy.REPLACE;
Data data=new Data.Builder().putInt(WorkerNextHagrala.DATA_KEY_WORK_TYPE,
WorkerNextHagrala.WORK_TYPE_SHOW_NOTIFICATION).build();
Log.d("GABI","scheduleUpdateNextNotifications - delay:"+delay);
OneTimeWorkRequest request=new OneTimeWorkRequest.Builder(WorkerNextHagrala.class).
setInitialDelay(delay, TimeUnit.MILLISECONDS).setInputData(data).build();
WorkManager.getInstance().beginUniqueWork(WorkerNextHagrala.WORK_NAME_SHOW_NOTIFICATION,workPolicy ,request).enqueue();
}
}
共 (0) 个答案