Flutter 应用程序,每天在 x 时间检查以查看是否需要向用户发送本地通知

Mic*_*ton 6 android android-alarms android-notifications dart flutter

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

APP:它提醒人们给植物浇水,用户可以指定他们希望这样做的频率。

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

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

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

Ish*_*led 0

这实际上取决于您是否需要针对每种植物进行特定提醒(例如,植物 1 应该在 16:30 浇水,植物 2 需要在 17:30 浇水),或者您所描述的所有通知一起到达的场景正是您想要的。

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

如果您可以接受所有植物的一个提醒 - 您可以设置一个闹钟来提醒所有植物

请在此处查看出色的实施示例

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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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