2017-02-13 4 views
1

Ich möchte Alarmmanager setzen auf alle 24 Stunden zu wiederholen, aber mein Code funktioniert nicht.Android Alarmmanager wiederholt unerwünschte

I gesetzt Alarmmanager in MainActivity eine Pop-up-Benachrichtigung über AlarmReceiver auszulösen, die eine Absicht zum MainActivity sendet.

ich überprüfen AlarmManger auch, ob es gesetzt ist, aber es gibt immer falsch, wenn ich alarmIntent2 nicht die von (###) in meinem Code unkommentiert ist. Und wenn ich alarmIntent2 verwende, bekomme ich keine Benachrichtigung, AlarmManager ist dann nicht richtig eingestellt.

Jedes Mal, wenn MainActivity aufgerufen wird, werden Alarmmanager wieder gesetzt.

Was mache ich falsch? Danke.

MainActivity.class

MainActivity extends ListActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    Intent myIntent = this.getIntent(); 
    if(myIntent.getExtras() != null) { 
     String nid = myIntent.getExtras().containsKey("nid") ? myIntent.getExtras().getString("nid") : "-"; 
     if(nid.equals("1234")) { 
      startFragmentActivityToShowMessage(); 
     } 
     else { 

      addNotification(); 
     } 

    } 
} 


private void addNotification() { 
     boolean alarmUp = false; 
     alarmUp = (PendingIntent.getBroadcast(this, 0, 
       new Intent("com.mypackage.AlarmReceiver.class"), 
       PendingIntent.FLAG_NO_CREATE) != null); 
     if(!alarmUp) { 

      Calendar calendar = Calendar.getInstance(); 
      calendar.setTimeInMillis(System.currentTimeMillis()); 
      calendar.set(Calendar.HOUR_OF_DAY, 8); 
      calendar.set(Calendar.MINUTE, 15); 
      calendar.set(Calendar.SECOND, 01); 

      Intent alarmIntent = new Intent(this, com.mypackage.AlarmReceiver.class); 
      // (###) Intent alarmIntent2 = new Intent("com.mypackage.AlarmReceiver.class"); (###) 
      PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
      AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60* 24, pendingIntent); 

     } 
    } 

Antwort

0

Oke. Ich habe es gelöst.

Intents in

PendingIntent.getBroadcast(this, 0, alarmIntent,..) 

müssen auf gleiche Weise erstellt werden. Dann kann ich prüfen, ob AlarmManager bereits eingestellt ist oder nicht. Das hat das Problem gelöst.

Beispiel:

Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class); 

oder

Intent alarmIntent = new Intent("com.mypackage.AlarmReceiver.class"); 

Auf diese Weise Kontrollen unten funktioniert.

Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class); 
boolean alarmUp = false; 
    alarmUp = (PendingIntent.getBroadcast(this, 0, 
      alarmIntent, 
      PendingIntent.FLAG_NO_CREATE) != null); 

und

Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60* 24, pendingIntent); 

Zweiter Weg mit fullyqualified Paketnamen habe ich noch nicht getestet, aber es sollte ich denke arbeiten.

Verwandte Themen