Android 无法在broadcastreceiver中的服务集中获取意图数据
我是android开发的新手。我正在开发一个简单的应用程序,其中包含1个活动、1个广播接收器和1个通知服务。有些警报是在活动中设置的,我想在设备启动/重新启动时重新设置它们 以下是我在MainActivity中的代码:Android 无法在broadcastreceiver中的服务集中获取意图数据,android,notifications,broadcastreceiver,alarmmanager,Android,Notifications,Broadcastreceiver,Alarmmanager,我是android开发的新手。我正在开发一个简单的应用程序,其中包含1个活动、1个广播接收器和1个通知服务。有些警报是在活动中设置的,我想在设备启动/重新启动时重新设置它们 以下是我在MainActivity中的代码: //randomDates is an (Long) array of time in milliseconds int len = randomDates.length; AlarmManager[]
//randomDates is an (Long) array of time in milliseconds
int len = randomDates.length;
AlarmManager[] alarmManager = new AlarmManager[len];
ArrayList<PendingIntent> intentArray = new ArrayList();
String type = "A";
Long t = new Date().getTime();
for (int i = 0; i < len; i++) {
if(t <= randomDates[i]) {
Intent myIntent = new Intent(MainActivity.this, Receiver.class);
if (i%2 == 1) {
type = "A";
} else {
type = "P";
}
myIntent.putExtra("type", type);
myIntent.putExtra("time", randomDates[i]);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, i, myIntent, PendingIntent.FLAG_ONE_SHOT);
alarmManager[i] = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager[i].set(AlarmManager.RTC, randomDates[i], pendingIntent);
intentArray.add(pendingIntent);
}
}
sharedPref = getSharedPreferences("MyCalApp",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean("areAlarmsAlreadySet", false);
editor.putString("alarmDates",Arrays.toString(randomDates));
editor.commit();
我从“活动”中设置的警报中正确获取所有通知。但是获取NullpointerException
Caused by: java.lang.NullPointerException at com.example.android.basicnotifications.NotificationService.onStart(NotificationService.java:38)
这是我从意向书中读额外内容的地方。我在这件事上遗漏了什么?
感谢您的帮助
另外,所有必要的权限都在清单文件中设置。在
onReceive()的末尾,您可以执行以下操作:
intent.setClass (context, NotificationService.class);
context.startService(intent);
这将以不包含“额外内容”的意图启动服务
。这将导致NullPointerException
另外,在onReceive()
中有以下代码:
Intent myIntent = new Intent(context.getApplicationContext(), NotificationService.class);
...
myIntent.putExtra("type", type);
myIntent.putExtra("time", randomDates1[i]);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, myIntent, PendingIntent.FLAG_ONE_SHOT);
这也不行。当您调用pendingent.getBroadcast()
时,将生成一个Intent
,它将作为广播Intent
发送。但是,您传递的是myIntent
,它用于服务
,而不是广播接收器
您需要更加注意您正在做的事情。在onReceive()的末尾,您可以执行以下操作:
intent.setClass (context, NotificationService.class);
context.startService(intent);
这将以不包含“额外内容”的意图启动服务
。这将导致NullPointerException
另外,在onReceive()
中有以下代码:
Intent myIntent = new Intent(context.getApplicationContext(), NotificationService.class);
...
myIntent.putExtra("type", type);
myIntent.putExtra("time", randomDates1[i]);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, myIntent, PendingIntent.FLAG_ONE_SHOT);
这也不行。当您调用pendingent.getBroadcast()
时,将生成一个Intent
,它将作为广播Intent
发送。但是,您传递的是myIntent
,它用于服务
,而不是广播接收器
你需要更加注意你在做什么。你需要显示NotificationService.onStart()方法,特别是第38行:)@aelimill,编辑了我的代码。它显示了第38行,在那里我得到了错误信息。:)您需要显示NotificationService.onStart()方法,特别是第38行:)@aelimill,编辑了我的代码。它显示了第38行,在那里我得到了错误信息。:)