Android环境为空?

问题描述:

我正在制作一个应用程序,提醒我每隔10分钟(远离计算机)休息一下,每隔一小时(休息10分钟,由加速度计跟踪)。Android环境为空?

该应用程序使用AlarmManager来安排警报。您必须按开始按钮来安排警报。每隔10分钟,ShortBreakNotif广播就会被解雇。每个小时,BreakNotifService都会被触发。 (我缩短了这些测试时间)。

ShortBreakNotif和BreakNotifService都需要启动MusicService。所以,因为有两个位置需要用于startService()的musicIntent,所以我试图只在TimerViewActivity中创建musicIntent并使其可用于TimerViewActivity onDestroy方法。这是做到这一点的正确方法吗?它不起作用(TimerViewActivity,251行):

musicIntent = new Intent(TimerViewActivity.this, MusicService.class); 

看起来上下文为空。那可能是因为活动尚未完全初始化?如果musicIntent仅在几秒钟后创建,那怎么可能呢?它说: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference

getApplicationContext()也不起作用。导致这个错误:java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference

我应该怎么做?

下面是完整的项目:https://github.com/felixglusch/AccelTimer/tree/master/app/src/main/java/com/example/felix/acceltimer

如果您对代码有任何疑问,请询问。

+0

我认为你必须创建在接收一个意图,一个在服务和不要试图在活动封装,因为环境会有所不同。 – GSala

您不应该通过构造函数创建活动。例如,在这种情况下,你应该使用上下文参数,而不是新建一个TimerViewActivity.java(你是对的,将不会正确初始化)。

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    Log.i("BroadCastNotif", "**** BROADCAST ****"); 

    Notif notification = new Notif(); 
    notification.notifyUser(context); 

    TimerViewActivity tva = new TimerViewActivity(); 
    Intent musicIntent = tva.getNewMusicServiceIntent(); 
    context.startService(musicIntent); 
} 

你应该做的事:

Intent musicIntent = new Intent(context, MusicService.class); 
+0

谢谢!这就是我最初的想法,但认为在一个地方做'新的Intent(context,MusicService.class)'可能会更好。 –