有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案