Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序未运行时推送计划通知_Java_Android - Fatal编程技术网

Java 应用程序未运行时推送计划通知

Java 应用程序未运行时推送计划通知,java,android,Java,Android,首先:这个问题和我上一个问题很相似,但答案对我没什么帮助 我正在制作一个待办事项应用程序。我一直在推送通知(即使应用程序没有运行)。 我的目标是推送关于待办任务的通知,即使应用程序没有运行 e、 g。 我在x/y/2021的mm:hh做了一个关于家庭作业的新任务。应用程序必须在该时刻推送通知,即使应用程序未运行 调度(延迟10只是为了调试): 类扩展工作程序: @NonNull @Override public Result doWork() { NotificationManager

首先:这个问题和我上一个问题很相似,但答案对我没什么帮助

我正在制作一个待办事项应用程序。我一直在推送通知(即使应用程序没有运行)。 我的目标是推送关于待办任务的通知,即使应用程序没有运行

e、 g。 我在x/y/2021的mm:hh做了一个关于家庭作业的新任务。应用程序必须在该时刻推送通知,即使应用程序未运行

调度(延迟10只是为了调试):

类扩展工作程序:

@NonNull
@Override
public Result doWork() {

    NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

    String date = getInputData().getString("date");
    String time = getInputData().getString("time");
    String title = getInputData().getString("title");
    String description = getInputData().getString("description");
    int delay = getInputData().getInt("delay", 0);

    Notification notification = new NotificationCompat.Builder(getApplicationContext(), "note")
            .setSmallIcon(R.mipmap.logo)
            .setContentTitle(title)
            .setContentInfo(date + " at " + time)
            .setContentText(description)
            .build();

    notificationManager.notify(1, notification);

    return Result.success();
}

老实说,我不读你的代码,但看看workManager(因为它是为这些东西设计的):

Android workManager文档:

WorkManager是一种API,它可以轻松地安排可延迟的异步任务,即使应用程序退出或设备重新启动,这些任务也会运行。WorkManager API适合并推荐替代所有以前的Android后台调度API,包括FirebaseJobDispatcher、GcmNetworkManager和Job Scheduler。WorkManager将其前身的功能整合到一个现代、一致的API中,该API可恢复到API级别14,同时还考虑到电池寿命

工作经理:


示例(我想这就是你想要的):

已经完成了!但是没有起作用。它仅在应用程序打开时才推送通知。也许我写代码失败了。你能链接一些例子吗?看到编辑了吗?我说,我已经尝试过这个解决方案了。当应用程序未运行时,它不会推送通知。在应用程序运行时刚刚完成。我要在另一部手机上试试你的代码,因为一些rom会杀死所有的后台工作,只是为了检查你的代码中是否有任何错误。完成!你是对的。现在我正在寻找关于它的提示。。。你能在@Shark上看到我的评论吗?这应该行得通,但你需要知道WorkManager对精确执行不是很友好。。。它查看一些内部的“电池健康”信息,并决定何时执行,因此当应用程序处于后台或不运行时,10秒的延迟可能最终为15分钟。让你的手机保持在充电器上,给它一个小时看看你的代码是否能正常工作,然后从那里进行微调/调试。谢谢你的帮助!事实上,当我阅读WorkManager文档时,我了解到了这一点。我已经按照@SamiShorman所说的做了:尝试使用另一个设备。我尝试了另一款,但与我的型号相同:华为Y6 2017。它的电池电量为31%,即使应用程序没有运行,也会在10秒后推送通知。。。我的设备的81%不是。。。有人有什么建议吗?华为设备有一个隐藏的菜单,你可以通过输入一些数字来访问它。。。另外一件事是设置你的应用被电池优化所忽略,因为华为喜欢扼杀不在前台的进程。您无法与特定于供应商的更改进行斗争。你不会赢的。只要调整你的代码,为不同的供应商做不同的事情。我已经知道了。好的,太好了。。。你能帮我一下吗?要将我的应用设置为被电池优化忽略,不同的供应商有不同的明确意图将用户带到那里,因此最多只需显示一个带有按钮的对话框,将他们带到“设置”/“电池优化”屏幕,他们必须手动禁用应用的电池优化。
@NonNull
@Override
public Result doWork() {

    NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

    String date = getInputData().getString("date");
    String time = getInputData().getString("time");
    String title = getInputData().getString("title");
    String description = getInputData().getString("description");
    int delay = getInputData().getInt("delay", 0);

    Notification notification = new NotificationCompat.Builder(getApplicationContext(), "note")
            .setSmallIcon(R.mipmap.logo)
            .setContentTitle(title)
            .setContentInfo(date + " at " + time)
            .setContentText(description)
            .build();

    notificationManager.notify(1, notification);

    return Result.success();
}