我是android开发的新手。我正在开发一个简单的应用程序,其中包含1个活动,1个BroadcastReceiver和1个Notification服务。有些报警设置为活动,我想在设备启动/重新启动时重新设置它们。无法在广播接收器中获取服务集中的意图数据
这里是MainActivity我的代码:
//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();
报警将在活动设置。 Receiver在Manifest文件中注册以接收事件。在接收器 的onReceive功能如下:
public void onReceive(Context context, Intent intent) {
if(intent.getAction() != null && intent.getAction().equalsIgnoreCase("android.intent.action.BOOT_COMPLETED")) {
Long[] randomDates1 = //get from shared Pref;
int len = randomDates1.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 <= randomDates1[i]) {
Intent myIntent = new Intent(context.getApplicationContext(), NotificationService.class);
if (i % 2 == 1) {
type = "A";
} else {
type = "P";
}
myIntent.putExtra("type", type);
myIntent.putExtra("time", randomDates1[i]);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, myIntent, PendingIntent.FLAG_ONE_SHOT);
alarmManager[i] = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
alarmManager[i].set(AlarmManager.RTC, randomDates1[i], pendingIntent);
intentArray.add(pendingIntent);
}
}
}
}
intent.setClass (context, NotificationService.class);
context.startService(intent);
}
而且在通知服务我取的意图数据如下:
Bundle b = intent.getExtras();
String type = b.getString("type"); // This is line number 38.
Long time = intent.getLongExtra("time",1l);
我正确地收到所有通知从活动设置警报。但得到NullpointerException
Caused by: java.lang.NullPointerException at com.example.android.basicnotifications.NotificationService.onStart(NotificationService.java:38)
这是我从其中读额外的意向。我在这里错过了什么? 任何帮助表示赞赏。
P.S.清单文件中设置了所有必要的权限。
你需要显示NotificationService.onStart()方法,特别是第38行:) – aelimill
@aelimill,编辑我的代码。它显示了第38行,我收到错误。 :) – meen