0

У меня есть проблема, когда я пытаюсь установить будильник:«Не удалось создать службу» Ошибка при тревоге устанавливается

Мои услуги «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"); 
} 

} 
+0

пожалуйста, поделитесь кодом: ServiceSetNotifications – LaurentY

+0

@LaurentY Я обновил вопрос – Slowmotion

+0

где находится строка 141 в классе ServiceSetNotifications.java? – LaurentY

ответ

1

Вы не экземпляр AlarmManager в службе.

Добавить это в OnCreate метод вашей службы:

manager=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
+0

Спасибо (еще раз :))! – Slowmotion

+0

@Slowmotion, добро пожаловать – LaurentY

 Смежные вопросы

  • Нет связанных вопросов^_^