收到BOOT_COMPLETE后访问MainActivity

时间:2017-08-24 08:02:57

标签: android android-broadcast

我有一个提醒应用程序会在给定时间通知我一个对象数组中的下一个提醒。

我试图让它在启动时再次设置通知。

我的启动接收器都设置在Manifest中,但是一旦手机启动,我如何从MainActivity访问任何信息,因为应用尚未打开?

我希望用这个 -

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("RegularReminders","onReceive");
        new MainActivity().setNotifications();
    }
}

但是一旦它尝试在MainActivity中运行该方法,它就会从该通知中返回一个null错误,应用程序在模拟器启动时崩溃,我在logcat中看到了这一点 -

java.lang.RuntimeException: Unable to start receiver com.androidandyuk.regularreminders.BootReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference

这指向一行 -

if (reminders.size() >= 0) {

我确实想知道是否可以将通知消息保存到SharedPrefs并在接收器中调用它,但是我也得到了null对象引用的错误。

我尝试发回另一个广播添加额外的信息,但我想在MainActivity中设置的接收器没有收听,因为应用还没有运行?

我知道谷歌正在保护我们免受恶意软件攻击,不会让他们在预订后做太多事情,但是有什么方法可以让我在重启后设置通知吗?

感谢。

2 个答案:

答案 0 :(得分:1)

虽然您无法从MainActivity访问变量,但您可以访问应用程序中使用的SharedPreferences和SQLite数据库,因此在这种情况下,我创建了一个新数组并将数据库读入其中并对其进行了处理。 / p>

答案 1 :(得分:0)

问题是,当您收到ACTION_BOOT_COMPLETED时,系统不会创建您的活动。

你可以做的是在启动完成后开始你的活动,并传递参数告诉它做一些工作。

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("RegularReminders","onReceive");
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent(context, YourActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            Bundle args = new Bundle();
            //put some args inside the bundle
            //attach the bundle
            i.putExtras(args);
            //start the activity
            context.startActivity(i);
        }
    }
}

如果您不知道如何开始并展示您的活动。您可以使用Android Services