2017-08-24 23 views
0

我有一个提醒应用程序,将在给定时间时通知我从物体,由于它的数组的下一个提醒。访问MainActivity一旦BOOT_COMPLETE收到

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

我有我的引导接收器都设置在清单中,但如何从MainActivity访问任何信息,一旦手机已经启动,因为应用程序还没有被打开?

我希望利用这一点 -

public class BootReceiver extends BroadcastReceiver { 

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

但它从通知中曾尝试运行在MainActivity的方法,应用程序崩溃的仿真器启动时返回一个空的错误,我看到这个在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设置为应用程序尚未运行是不听?

我知道谷歌是保护我们免受恶意软件,而不是让他们的书后做多,但没有任何办法解决这让我可以在重新启动后设置我的通知?

谢谢。

+0

如果你打算倒戈,请至少让我知道为什么这样我可以学习。我花了几个小时寻找这个答案,尝试了我在这里发现的一些不同的东西,但没有喜悦,因此我问。我觉得我已经列出了所有的信息,所以请让我知道我做错了什么。谢谢。 – AndyCr15

回答

1

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

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

+0

谢谢,这对我来说真的很有意义。我在报告GPS位置到不同的应用程序时已经这样做了,所以我想我可以设置一个监视对象数组的服务。我假设我然后使用BootReceiver启动服务。事实上,快速看看你给的链接,也许我安排了一份工作?虽然之前我没有使用过它们,但是必须研究这些。谢谢。 – AndyCr15