收到 BOOT_COMPLETE 后访问 MainActivity
Accessing MainActivity once BOOT_COMPLETE is received
我有一个提醒应用程序,当来自一组对象的下一个提醒到期时,它会在给定时间通知我。
我正在尝试让它在启动时再次设置通知。
我在清单中设置了我的启动接收器,但是如果 phone 已经启动,我如何从 MainActivity 访问任何信息,假设应用程序尚未打开?
我希望用这个 -
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("RegularReminders","onReceive");
new MainActivity().setNotifications();
}
}
但是一旦它尝试 运行 MainActivity 中的方法,它 returns 来自该通知的空错误,应用程序在模拟器启动时崩溃,我在 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 并在接收器中调用它,但是这样做时我也遇到了空对象引用错误。
我尝试发回另一个添加额外信息的广播,但我猜想在 MainActivity 中设置的接收器没有监听,因为应用程序没有被监听 运行?
我知道 Google 正在保护我们免受恶意软件的侵害,不会让他们在预订后做太多事情,但是有什么办法可以解决这个问题,以便我可以在重启后设置通知?
谢谢。
问题是您收到 ACTION_BOOT_COMPLETED
时未创建您的 activity。
你可以做的是在引导完成后启动你的 activity 并传递参数告诉它做一些工作。
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);
}
}
}
如果您不知道如何开始并展示您的 activity。您可以使用 Android Services.
尽管您无法从 MainActivity 访问变量,但您可以访问应用程序中使用的 SharedPreferences 和 SQLite 数据库,因此在这种情况下,我创建了一个新数组并将数据库读入其中并进行了处理。
我有一个提醒应用程序,当来自一组对象的下一个提醒到期时,它会在给定时间通知我。
我正在尝试让它在启动时再次设置通知。
我在清单中设置了我的启动接收器,但是如果 phone 已经启动,我如何从 MainActivity 访问任何信息,假设应用程序尚未打开?
我希望用这个 -
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("RegularReminders","onReceive");
new MainActivity().setNotifications();
}
}
但是一旦它尝试 运行 MainActivity 中的方法,它 returns 来自该通知的空错误,应用程序在模拟器启动时崩溃,我在 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 并在接收器中调用它,但是这样做时我也遇到了空对象引用错误。
我尝试发回另一个添加额外信息的广播,但我猜想在 MainActivity 中设置的接收器没有监听,因为应用程序没有被监听 运行?
我知道 Google 正在保护我们免受恶意软件的侵害,不会让他们在预订后做太多事情,但是有什么办法可以解决这个问题,以便我可以在重启后设置通知?
谢谢。
问题是您收到 ACTION_BOOT_COMPLETED
时未创建您的 activity。
你可以做的是在引导完成后启动你的 activity 并传递参数告诉它做一些工作。
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);
}
}
}
如果您不知道如何开始并展示您的 activity。您可以使用 Android Services.
尽管您无法从 MainActivity 访问变量,但您可以访问应用程序中使用的 SharedPreferences 和 SQLite 数据库,因此在这种情况下,我创建了一个新数组并将数据库读入其中并进行了处理。