Это мой код для создания PendingIntent
public PendingIntent checkAlarm(Context context, Alarm alarm) {
Intent startAlarmArrival = new Intent(context,MyReceiver.class);
Bundle b = new Bundle();
b.putSerializable("SerialAlarm",alarm);
startAlarmArrival.putExtra("CallingAlarm",b);
return PendingIntent.getBroadcast(context,
ALARM_ID,
startAlarmArrival,
PendingIntent.FLAG_UPDATE_CURRENT);
}
Это мой приемник
public void onReceive(Context context, Intent intent) {
SettingTime settingTime = new SettingTime();
Vibrator buzz;
Toast.makeText(context, "Wake Up", Toast.LENGTH_LONG).show();
context.getSystemService(Context.ALARM_SERVICE);
buzz = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
buzz.vibrate(2000);
showNotification(context);
Alarm alarm = new Alarm();
Bundle b = (Bundle) intent.getBundleExtra("CallingAlarm");
assert b != null;
alarm = (Alarm) b.getSerializable("SerialAlarm");
assert alarm != null;
settingTime.setAlarm(alarm);
}
Я звоню checkAlarm с AlarmManager и пытаюсь снова установить тот же сигнал тревоги. SettingTime - это объект моей основной деятельности, в котором есть функция для повторного вызова AlarmManager. Однако, когда срабатывает первый сигнал тревоги, я получаю сообщение об ошибке:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
Я знаю, что код не очень красивый, но я хочу, чтобы он работал до того, как я его почистил, но я не могу понять, что я делаю неправильно
Это мой метод setAlarm
public void setAlarm(Alarm alarm) {
Calendar c = Calendar.getInstance();
Date currentDate = new Date();
c.setTime(currentDate);
calendar.set(Calendar.HOUR_OF_DAY,(alarm.getHour()));
calendar.set(Calendar.MINUTE,alarm.getMinute());
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.DATE,c.get(Calendar.DATE));
calendar.set(Calendar.MONTH,c.get(Calendar.MONTH));
calendar.set(Calendar.YEAR,c.get(Calendar.YEAR));
days = alarm.getDays();
if(days[Calendar.MONDAY - 1] && alarm.getStatus()){
calendar.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
}
}
if(days[Calendar.TUESDAY - 1]&& alarm.getStatus()){
calendar.set(Calendar.DAY_OF_WEEK,Calendar.TUESDAY);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
}
}
if(days[Calendar.WEDNESDAY - 1]&& alarm.getStatus()){
calendar.set(Calendar.DAY_OF_WEEK,Calendar.WEDNESDAY);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
}
}
if(days[Calendar.THURSDAY- 1]&& alarm.getStatus()){
calendar.set(Calendar.DAY_OF_WEEK,Calendar.THURSDAY);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
}
}
if(days[Calendar.FRIDAY- 1]&& alarm.getStatus()){
calendar.set(Calendar.DAY_OF_WEEK,Calendar.FRIDAY);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
}
}
if(days[Calendar.SATURDAY - 1]&& alarm.getStatus()){
calendar.set(Calendar.DAY_OF_WEEK,Calendar.SATURDAY);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
}
}
if(days[Calendar.SUNDAY - 1]&& alarm.getStatus()) {
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),checkAlarm(this,alarm));
}
}
}