У меня есть проблема, когда я пытаюсь установить будильник:«Не удалось создать службу» Ошибка при тревоге устанавливается
Мои услуги «SetNotifications» называется на широковещательный приемник под названием «BroadcastReceiverCalendar». Служба «SetNotifications» устанавливает несколько аварийных сигналов.
Мое заявление аварии на последней строке, см. Код ошибки ниже.
Вот код моей установки сигнализации:
Intent alarmIntent = new Intent(this, BroadcastReceiverCalendar.class);
String action = "ServiceCalendrier.ALARM_NOTIF_"+i;
alarmIntent.setAction(action);
alarmIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
alarmIntent.putExtra ("COURS", cours);
alarmIntent.putExtra ("SALLE", salle);
final PendingIntent mPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, 0);
manager.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), mPendingIntent); // crash here
Выход ошибки:
03-11 14:59:29.646 15021-15021/com.example.xx W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40c4c1f8)
03-11 14:59:29.656 15021-15021/com.example.xx E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to create service com.example.xx.ServiceSetNotifications: java.lang.NullPointerException
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2263)
at android.app.ActivityThread.access$1600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.xx.ServiceSetNotifications.setNotificationsAlarms(ServiceSetNotifications.java:141)
at com.example.xx.ServiceSetNotifications.onCreate(ServiceSetNotifications.java:61)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2253)
at android.app.ActivityThread.access$1600(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
at dalvik.system.NativeStart.main(Native Method)
Я попробовал несколько способов установки для pendingIntent, но я не могу заставить его работать. У вас есть идеи? Спасибо заранее!
UPDATE
public class ServiceSetNotifications extends Service{
BroadcastReceiverCalendar receiver = new BroadcastReceiverCalendar();
private static final String TAG = "Servicesetnotif";
private PendingIntent pendingIntent;
private AlarmManager manager;
@Override
public IBinder onBind(Intent intent) {
//TODO for communication return IBinder implementation
return null;
}
public void onDestroy() {
super.onDestroy();
//unregisterReceiver(receiver);
Toast.makeText(this, "service notif", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
}
@Override
public void onCreate() {
super.onCreate();
Log.v("Sortie","Service setNotification");
// getIcs(getApplicationContext());
//Context context = getApplicationContext();
setNotificationsAlarms(getApplicationContext());
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Context context = getApplicationContext();
setNotificationsAlarms(getApplicationContext());
return START_NOT_STICKY;
}
public void setNotificationsAlarms(Context arg0){
SharedPreferences mPrefs = getApplicationContext().getSharedPreferences("label", 0);
int notifTime = mPrefs.getInt("notifTime", 10);
//Log.v("Sortie",Integer.toString(notifTime));
List coursRaw = new ArrayList();
List<String[]> listeCours = new ArrayList<String[]>();
//analyse of ics file
listeCours=parseFile();
Log.v("Sortie","Parse done");
if(listeCours.isEmpty()){
Log.v("Sortie","holidays");
}
else{
for (int i = listeCours.size()-1; i >= 0 ; i--) {
String[] strings = listeCours.get(i);
String cours = strings[0];
String heure = strings[1];
String salle = strings[2];
Log.v("Sortie",cours+" "+salle+" "+i);
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
Calendar time = defTime(heure, notifTime);
//UTC to Paris time
dateFormat.setCalendar(time);
dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
//Log.v("Sortie","!Heure paris :"+time.get(Calendar.HOUR_OF_DAY) + ":" + time.get(Calendar.MINUTE));
//IntentFilter myFilter = new IntentFilter("ServiceCalendrier.ALARM_NOTIF_"+i);
Intent alarmIntent = new Intent(this, BroadcastReceiverCalendar.class);
String action = "ServiceCalendrier.ALARM_NOTIF_"+i;
alarmIntent.setAction(action);
alarmIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
alarmIntent.putExtra ("COURS", cours);
alarmIntent.putExtra ("SALLE", salle);
manager.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), mPendingIntent);
}
}
//Log.v("Sortie","parse done");
}
}
пожалуйста, поделитесь кодом: ServiceSetNotifications – LaurentY
@LaurentY Я обновил вопрос – Slowmotion
где находится строка 141 в классе ServiceSetNotifications.java? – LaurentY