2016-12-10 8 views
0

Zuvor arbeitete der Alarmmanager. Ich glaube nicht, dass ich etwas verändert habe, aber jetzt fängt es überhaupt nicht an. HierAlarmManager startet nicht Service

ist der Code, wo ich den Alarmmanager eingestellt:

SettingsActivity.java 

Intent intent; 
static PendingIntent recurringDownload; 

intent = new Intent(context, UpdateScoresService.class); 

recurringDownload = PendingIntent.getService(context, 0, intent, 0); 
Preference.OnPreferenceChangeListener refreshListener = new Preference.OnPreferenceChangeListener() { 
       @Override 
       public boolean onPreferenceChange(Preference preference, Object newValue) { 
        if(newValue.toString().equals("1")){ /* daily */ 
         background_refresh.setSummary("Scores will be refreshed daily."); 
         AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
         manager.cancel(recurringDownload); 
         recurringDownload.cancel(); 
         Log.e("DAILY REFRESH", " "); 
         Calendar calendar = Calendar.getInstance(); 
         calendar.setTimeInMillis(System.currentTimeMillis()); 
         calendar.set(Calendar.HOUR_OF_DAY,10); 
         calendar.set(Calendar.MINUTE,00); 
         if(calendar.before(Calendar.getInstance())){ 
          Log.e("AFTER", "10 AM DAILY"); 
          calendar.add(Calendar.DATE, 1); 
         } 
         manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, recurringDownload); 
        }else if(newValue.toString().equals("2")){ /* weekly */ 
         Log.e("WEEKLY REFRESH", " "); 
         background_refresh.setSummary("Scores will be refreshed weekly."); 
         AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
         manager.cancel(recurringDownload); 
         recurringDownload.cancel(); 
         Calendar calendar = Calendar.getInstance(); 
         calendar.setTimeInMillis(System.currentTimeMillis()); 
         calendar.set(Calendar.HOUR_OF_DAY,10); 
         calendar.set(Calendar.MINUTE,00); 
         if(calendar.before(Calendar.getInstance())){ 
          Log.e("AFTER", "10 AM WEEKLY"); 
          calendar.add(Calendar.DATE, 1); 
         } 
         manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, recurringDownload); 
        }else{ /* manually */ 
         background_refresh.setSummary("Scores will be refreshed manually."); 
         Log.e("MANUAL REFRESH", " "); 
         AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
         manager.cancel(recurringDownload); 
         recurringDownload.cancel(); 

        } 
        return true; 
       } 
}; 

Die UpdateScoresService ist hier:

public class UpdateScoresService extends IntentService { 

    public int countChanged; 
    Context context = this; 

    public UpdateScoresService() { 
     super("UpdateScoresService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Log.e("onHandleIntent", "grabbing scores"); 
     countChanged = new GetAnimeScores(getApplicationContext()).refreshScores(); 

     if(countChanged>0){ //Display notification if any scores changed 
      Log.d("Creating notification", " "); 
      NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
      builder.setSmallIcon(R.drawable.ic_timeline_white_24dp); 
      builder.setContentTitle("MAL Score Tracker"); 
      builder.setAutoCancel(true); 

      if(countChanged==1){ 
       builder.setContentText("1 score changed since you were gone!"); 
      }else{ 
       builder.setContentText(countChanged+" scores changed since you were gone!"); 
      } 

      Intent intent1 = new Intent(context, MainActivity.class); 
      TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
      stackBuilder.addParentStack(MainActivity.class); 
      stackBuilder.addNextIntent(intent1); 
      PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 
      builder.setContentIntent(pendingIntent); 

      NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
      notificationManager.notify(0,builder.build()); 
     } 
    } 
} 
} 

Die Log im SettingsActivity Druck, aber das Log in der onHandleIntent vom Dienst tun nicht drucken. Ich bin mir nicht sicher, was falsch ist.

+0

Möglicherweise benötigen Sie den Alarm, um einen BroadcastReceiver oder WakefulBr auszulösen oadcastReceiver was dann startet den Dienst –

+0

@NickFriskel Hmm was meinst du damit? Kann ich ein Codebeispiel sehen? Vielen Dank. – user2923535

Antwort

0

Es ist besser, eine BroadcastReceiver zu haben, die für den Start des Dienstes verantwortlich sein wird. Der Code dafür sollte wie folgt aussehen:

eine BroadcastReceiver Klasse erstellen:

public class ReceiverToStartService extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Intent i = new Intent(context, UpdateScoresService.class); 
     ComponentName service = context.startService(i); 
    } 
} 

Register Empfänger in Ihrem Manifest:

<receiver android:name=".ReceiverToStartService"/> 

nun die Absicht in Ihrer Aktivität ändern, die Sie vorbei sind to PendingIntent:

intent = new Intent(context, ReceiverToStartService.class); 
recurringDownload = PendingIntent.getService(context, 0, intent, 0); 
+0

Nein schien immer noch nicht auszulösen. Das ist sehr seltsam. Es hat vorher funktioniert und ich habe es nicht angerührt, seit ich es vor ein paar Monaten geschrieben habe. Als ich vor einer Woche zu RetroFit für meine Netzwerkanrufe wechselte, schien das nicht mehr zu funktionieren. Ich habe auch den getService zu getBroadcast gewechselt, wenn das hilft, aber immer noch wie kein Würfel aussieht. – user2923535

+0

Hast du deinen Dienst in Manifest registriert? – Marat

+0

Ja, ich habe es registriert. – user2923535