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
如果您对代码有任何疑问,请询问。
您不应该通过构造函数创建活动。例如,在这种情况下,你应该使用上下文参数,而不是新建一个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);
谢谢!这就是我最初的想法,但认为在一个地方做'新的Intent(context,MusicService.class)'可能会更好。 –
我认为你必须创建在接收一个意图,一个在服务和不要试图在活动封装,因为环境会有所不同。 – GSala