重新启动时从SQLiteDatabase重新创建通知

时间:2018-09-16 00:23:29

标签: android android-studio alarmmanager android-broadcastreceiver

我正在我的应用程序中实施提醒(通知),到目前为止运行良好。

这是从片段触发的。它设置AlarmManager并将提醒添加到SQLiteDatabase:

public void SendNotification (Reminders reminder, Context context)
    {

        Random rand = new Random();
        db.AddReminderToDB(reminder); //adds all reminder fields to SQLite database
        AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, NotificationCentre.class);

        int id = rand.nextInt(100); //for testing
        intent.putExtra("Title", reminder.getTitle());
        intent.putExtra("Message", reminder.getMessage());
        intent.putExtra("Channel", reminder.getChannel());
        intent.putExtra("ID", id);

        PendingIntent pI = PendingIntent.getBroadcast(context, id, intent, 0);

        alarm.setExact(AlarmManager.RTC_WAKEUP, reminder.getTime(), pI);

    }

这被发送到广播接收器:

public class NotificationCentre extends BroadcastReceiver
{

    @Override
    public void onReceive (Context context, Intent intent)
    {
        if("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
            SendNotificationAfterReboot(context);
        }

        else
        {
            ActuallySendNotification(context,intent);
        }
    }


    void ActuallySendNotification(Context context, Intent intent)
    {
        String action = intent.getAction();

        Log.i("Receiver", "Broadcast received: " + action);

        String Channel = intent.getExtras().getString("Channel");
        String title = intent.getExtras().getString("Title");
        String message = intent.getExtras().getString("Message");
        int id = intent.getExtras().getInt("ID");

        NotificationHelper nh = new NotificationHelper(context);
        NotificationCompat.Builder nBuilder = nh.getChannel1Notification(title, message,Channel);
        nh.getManager().notify(id, nBuilder.build());
    }

一切正常。即使用户最小化/终止了该应用程序,通知仍会在设置的时间触发。

我面临的障碍是,如果电话已重启,请确保它们能够启动。我在这里阅读了许多问题,并在网上阅读了有关此的文章,还有一些问题。

主要由于堆栈溢出,我设法让广播接收器在电话重启时执行代码。

我的问题:

  1. 广播接收器在启动时被激发(考虑到应用本身未运行)是否能够从数据库中读取?

  2. 假设它可以并且在查询数据库后我得到了通知信息,我想我需要设置一个新的AlarmManager并将通知数据传递给它。我是在广播接收器还是其他地方执行此操作?

到目前为止,如果意图动作是BOOT_COMPLETED,我尝试了从BroadcastReceiver调用的方法:

void SendNotificationAfterReboot(Context context)
{

    DatabaseHelper db = new DatabaseHelper(context);
    ArrayList<Reminders> remindersList = new ArrayList<>();

    remindersList.addAll(db.REMINDERS_ALL_TO_LIST());

    for (Reminders reminder: remindersList) {

       Toast.makeText(context,"Got a reminder",Toast.LENGTH_SHORT).show();

    }


}

...但未出现吐司。也似乎崩溃了SystemUI。我认为这与“上下文”不是我重启后的样子有关。

这里的任何帮助将不胜感激。

总而言之,我需要知道的是如何为重新启动后从SQliteDatabase,BroadcastReceiver中检索到的每个提醒设置AlarmManagers。

非常感谢, 亚历克斯

0 个答案:

没有答案