2017-06-01 3 views
0

Ich versuche Anwendung zu erstellen, die Benachrichtigung täglich zu einer bestimmten Zeit senden wird .. Ich verwende .setOngoing (true) und .setAutoCancel (true) weil ich die Benachrichtigung beibehalten möchte, es sei denn, der Benutzer öffnet die Anwendung, indem er auf die Benachrichtigung klickt. Aber wenn die Anwendung geöffnet wird, wird die Benachrichtigung ausgeblendet und nach einigen Sekunden erneut angezeigt. Wie kann ich die Benachrichtigung bei geöffneter Anwendung stoppen, aber nur zu bestimmten Zeiten?Android - Benachrichtigung wiederholt sich nach Aktivität Öffnen

MainActivity Code ist:

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

     Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.HOUR_OF_DAY, 16); 
     calendar.set(Calendar.MINUTE, 6); 
     calendar.set(Calendar.SECOND, 0); 
     Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

    } 

} 

AlarmReceiver Klasse:

public class AlarmReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

    Intent intent1 = new Intent(context, MainActivity.class); 
    intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 100, intent1, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.ic_stat_name) 
      .setContentIntent(pendingIntent) 
      .setContentText("notification text") 
      .setContentTitle("notification title") 
      .setAutoCancel(true) 
      .setOngoing(true); 
    notificationManager.notify(100, builder.build()); 

} 

}

+0

Warum haben Sie '.setAutoCancel (true)' verwendet, während Sie die Benachrichtigung mit 'notification_id', also 100 in Ihrem Code, abbrechen können? – Wizard

+0

Das Problem ist nicht, die Benachrichtigung abzubrechen, aber die Benachrichtigung erscheint nach einigen Sekunden wieder Wie kann ich aufhören, sie wieder zu sehen? –

+0

Ich habe versucht, Benachrichtigung mit Benachrichtigungs-ID abzubrechen, aber Benachrichtigung erscheint wieder .. :( –

Antwort

1

In Ihrem mainactivity diesen Code setzen: -

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 1); 
calendar.set(Calendar.MINUTE, 49); 
calendar.set(Calendar.SECOND, 0); 
calendar.set(Calendar.AM_PM,Calendar.PM); 

if(calendar.getTimeInMillis()>System.currentTimeMillis()){ 

    Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE); 
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent); //Repeat every 24 h 


} 
else{ 

    Toast.makeText(getApplicationContext(),"Always set value with greater than current time",Toast.LENGTH_SHORT).show(); 
} 

und den Code auf reciever sieht wie folgt ändern: -

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

     intent = new Intent(context, MainActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     intent.putExtra("STARTED_BY_RECEIVER", true); 
     context.startActivity(intent); 

     PendingIntent pendingIntent = PendingIntent.getActivity(context, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(context) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentIntent(pendingIntent) 
       .setContentText("notification text") 
       .setContentTitle("notification title") 
       .setAutoCancel(true) 
       .setOngoing(true); 
     notificationManager.notify(100, builder.build()); 

Try this !!

+0

Benachrichtigung nicht wieder erscheinen .. auch nicht Anwendung nach Antippen der Benachrichtigung zu öffnen. Ich muss Anwendung durch Tippen auf Benachrichtigung öffnen –

+0

Ich bin froh, dass Sie mir helfen .. jetzt das erste Mal, wenn ich Anwendung durch Tippen auf Benachrichtigung öffnen, verschwindet die Meldung und Anwendung geöffnet und Benachrichtigung erscheint nicht wieder .. aber wenn ich Anwendung öffne dann erscheint wieder Benachrichtigung nach wenigen Sekunden –

+0

So wie Sie wollen? bedeutet wie pro Anforderung Ich mache das schon, aber wenn Sie die Anwendung geschlossen haben und wieder öffnen, erhalten Sie eine Benachrichtigung, weil Alarm Sie für die Zeit alarmierte. –

Verwandte Themen