【问题标题】:Flutter app, check daily at x time to see if I need to send local notification to userFlutter 应用程序,每天在 x 时间检查,看看我是否需要向用户发送本地通知
【发布时间】:2019-12-18 13:13:46
【问题描述】:

我对如何完成这项任务有点不确定,希望得到一些澄清。

APP:它提醒人们给植物浇水,用户可以指定他们希望多久浇一次水。

我面临的问题是如何将本地通知发送给用户。而不是为他们拥有的每个新工厂设置单独的通知,并安排时间关闭。我希望我可以指定一天中的某个时间(比如早上 8:00),我的应用程序会在我所有的植物中运行并检查今天是否需要浇水。如果他们这样做了,它会通过本地通知告诉用户,例如“你今天有 5 株植物要浇水”,当他们点击它时,他们会进入应用程序,向他们显示它们是什么植物。

  • 我应该使用 Alarm Manager api 来进行每日警报吗?但这是否可以运行一个脚本来检查工厂数据,然后发送本地通知。
  • 或者最好只为每个工厂附加一个单独的本地通知?

现在我仍然是 Android/Flutter 开发的新手,只是有点不确定这方面的最佳实践是什么?希望我所说的足够清楚,很高兴回答任何进一步的问题。提前感谢您的帮助。

【问题讨论】:

  • 这方面有什么更新吗?

标签: android flutter dart android-notifications android-alarms


【解决方案1】:

我认为this package 会有所帮助。

【讨论】:

    【解决方案2】:

    这真的取决于您是否需要为每个植物提供特定的提醒(例如,植物 1 应该在 16:30 浇水,而植物 2 需要在 17:30 浇水)或者您描述的所有通知一起到达的场景是您想要的。

    如果您需要每株植物的提醒 - 唯一的方法是为每株植物设置警报

    如果您可以为所有植物使用一个提醒 - 您可以设置一个警报贯穿所有植物

    请看一个优秀的实现示例here

    public class Water extends BroadcastReceiver 
    {    
        @Override
        public void onReceive(Context context, Intent intent) 
        {   
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
            wl.acquire();
    
            // Check if there are plants need watering
            // Notify user
    
            wl.release();
        }
    
        public void setAlarm(Context context)
        {
            AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
            Intent i = new Intent(context, Alarm.class);
            PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
            am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute
        }
    }
    

    当您全部设置警报时,Android 系统将安排一个重复警报,在 onReceive 函数中唤醒您的进程(通过向其广播事件)。

    请记住,这只是核心,请查看我提供的完整设置链接,包括所需的权限

    【讨论】:

    • 嗨,Ishay,我很高兴他们每天只提醒所有植物。但我不一定需要每天都通知用户,因为有些日子可能有 0 个植物需要浇水。通读那篇文章,警报管理器是否会在用户不知道发生的情况下关闭并在后台运行?
    • 警报管理器会在您配置的时间间隔内将您的应用程序“唤醒”到您在广播接收器中编写的代码部分。换句话说,用户不知道设置了警报,实际上您的应用程序不需要在前台运行。我在答案中添加了我认为可以解决您问题的内容
    • 报警管理器运行良好的功能。但是我在弄清楚如何在 AlarmManager 回调中使用 SharedPreferences 之类的插件时遇到了麻烦,因为插件丢失了。
    • SharedPreferences 应该不是问题 afaik,你能分享你的代码吗?
    • 因为我在 Flutter 而不是核心 Android Java 中工作,所以我认为我不能使用您提供的示例代码,而是找到一些 Flutter 包。
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2023-01-09
    • 2012-01-22
    相关资源
    最近更新 更多