2016-07-20 4 views
0

Ich habe ein Benachrichtigungsfeld erstellen, aber es gibt ein Problem. Ich habe einen Dienst dafür erstellt, aber die Benachrichtigung wird nicht wiederholt. Ich verstehe nicht, was für ein Problem. Hier ist mein Code:Wie wiederhole ich die Benachrichtigung zu bestimmten Zeiten in Android durch den Dienst

MainActivity.java

public class MainActivity extends Activity { 
    Button b1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     b1=(Button)findViewById(R.id.button); 
     b1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent myIntent = new Intent(MainActivity.this , Notification.class); 
       AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
       PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this, 0, myIntent, 0); 

       Calendar calendar = Calendar.getInstance(); 
       calendar.set(Calendar.HOUR_OF_DAY, 12); 
       calendar.set(Calendar.MINUTE, 00); 
       calendar.set(Calendar.SECOND, 00); 

       alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 20*1000 , pendingIntent); 
      } 
     }); 
    } 
} 

Notification.java

public class Notification extends Service{ 

    @Override 
    public void onCreate() { 

     Toast.makeText(this, "Notification", Toast.LENGTH_LONG).show(); 
     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     @SuppressWarnings("deprecation") 

     android.app.Notification notification = new android.app.Notification(R.drawable.ic_launcher,"New Message", System.currentTimeMillis()); 
     Intent notificationIntent = new Intent(this,NotificationView.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0); 

     notification.setLatestEventInfo(this, "hahaha","U have recived new message", pendingIntent); 
     notificationManager.notify(9999, notification); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

in AndroidManifest.xml erklärte ich die Erlaubnis für Alarm und declered Service.

Es gibt ein Problem, wenn ich auf die Schaltfläche klicken, dann starten Sie eine Benachrichtigung show.but Benachrichtigung wird nicht wiederholt.

+0

Die 'AlarmManager # setRepeating()' Methode ist seit KitKat nicht korrekt. Außerdem stellen Sie den Alarm so ein, dass er alle 20 Sekunden wiederholt wird, was in aktuellen Android-Versionen wahrscheinlich auf mindestens eine Minute erhöht wird. Wenn Sie ein so kurzes Intervall benötigen, wird die Verwendung von 'AlarmManager' nicht empfohlen. –

Antwort

1

Sie machen die Benachrichtigung mit der gleichen ID (9999 in Ihrem Fall). Wenn eine neue Benachrichtigung erfolgt, wird lediglich die vorhandene Benachrichtigung ersetzt. Soweit Sie sehen, erscheint nur eine Benachrichtigung. Um verschiedene Benachrichtigungen anzuzeigen, sollten Sie die ID Ihrer Benachrichtigung in Ihrer notify() -Methode ändern. Die andere Option wäre, zu prüfen, ob eine Benachrichtigung bereits angezeigt wird (ich glaube, dass diese Funktion relativ neu ist) und dann die vorhandene Benachrichtigung zu aktualisieren, um den Benutzer wissen zu lassen, dass eine neue empfangen wurde.

EDIT: Außerdem erstellen Sie die Benachrichtigung nur einmal, da Sie den Benachrichtigungsdienst nur einmal initialisieren. Wenn der Alarmmanager das nächste Mal wiederholt, sieht er, dass der Dienst bereits gestartet wurde und initialisiert keine neue Instanz. Sie müssen den Dienst vor dem nächsten geplanten Zeitraum stoppen, damit der Alarmmanager ihn erneut initialisiert.

Dies ist sowieso nicht ratsam. Wenn Benachrichtigungen wiederholt geplant werden müssen, erstellen Sie eine Benachrichtigung in einem Hintergrund-Thread in einem Service in Routineintervallen innerhalb einer Schleife, bis eine bestimmte Bedingung erfüllt ist.

+0

Ich habe ID geändert aber nicht funktioniert nur einmal Benachrichtigung zeigt .. wenn ich auf die Schaltfläche geklickt habe. Warum wiederholt sich meine Serviceklasse nicht? @ucsunil –

+0

Oh .. Ich sehe das Problem jetzt. Sie erstellen den Dienst nur einmal, obwohl es so aussieht, als würde sich der AlarmManager wiederholen. Ich werde meine Antwort bearbeiten. – ucsunil

Verwandte Themen