2016-07-22 15 views
2

In meiner App habe ich eine laufende Benachrichtigung hinzugefügt. Die Benachrichtigung enthält ein Symbol in der Statusleiste und weitere Details im Benachrichtigungsbereich.Android - Wie setze ich ein laufendes Ereignis auf die Statusleiste, aber nicht auf den Benachrichtigungsbildschirm?

Dieses Bild ist von Google. Dies ist der Infobereich:

This image is from Google. This is the notification area

Ich brauche, dass das Symbol in der Statusleiste bleiben wird es immer, aber der Benutzer wird in der Lage sein, die Benachrichtigung in dem Benachrichtigungs Bildschirm zu schließen, damit der Benutzer nur mit dem bleiben Symbol in der Statusleiste. Wie kann ich es tun?

Mein Service-Code:

@SuppressWarnings("static-access") 
    @Override 
    public int onStartCommand(Intent intent, int flag, int startId) 
    { 
     super.onStartCommand(intent, START_STICKY, startId); 

     ... 

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
      .setContentTitle(getString(R.string.myNotificationString)) 
      .setContentText(string1 + " | " + string2) 
      .setLargeIcon(appIcon) 
      .setSmallIcon(getResources().getIdentifier("icon_" + getCurrentIconNumber(),"drawable", getPackageName())); // the icon changes every day 

     Intent resultIntent = new Intent(this, MainActivity.class); 
     PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0 ,resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     mBuilder.setContentIntent(resultPendingIntent); 
     Notification notification = mBuilder.build(); 
     notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT; 

     mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     mNotifyMgr.notify(myRequestCode, notification); 

     return START_STICKY; 
    } 
+0

leider zu definieren, aber für mich ist es nicht das Problem klar – ddb

+0

I edited . Kurz gesagt: Sagen wir, ich habe eine App, die den Benutzern den Batteriestatus anzeigt. Der Benutzer möchte den Akkustatus in der Statusleiste sehen, aber er möchte ihn nicht ständig als Benachrichtigung im Infobereich sehen. Daher möchte ich, dass der Benutzer die Benachrichtigung im Infobereich schließen kann, das Symbol in der Statusleiste jedoch nicht verschwindet. – TamarG

+0

wie ein Wecker aktive Benachrichtigung? Sie können die Benachrichtigung entfernen, dass Sie bereits einen Alarm eingestellt haben. Wenn Sie sie jedoch entfernen, wird das App-Symbol in der Statusleiste immer angezeigt. Habe ich verstanden? – ddb

Antwort

0

try resultPendingIntent wie unten

PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0 ,resultIntent, PendingIntent.FLAG_ONGOING_EVENT); 

EDIT 1

@SuppressWarnings("static-access") 
    @Override 
    public int onStartCommand(Intent intent, int flag, int startId) 
    { 
     super.onStartCommand(intent, START_STICKY, startId); 

     ... 

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
      .setContentTitle(getString(R.string.myNotificationString)) 
      .setContentText(string1 + " | " + string2) 
      .setLargeIcon(appIcon) 
      .setSmallIcon(getResources().getIdentifier("icon_" + getCurrentIconNumber(),"drawable", getPackageName())); // the icon changes every day 

     Intent resultIntent = new Intent(this, MainActivity.class); 
     PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0 ,resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
     mBuilder.setContentIntent(resultPendingIntent); 
     Notification notification = mBuilder.build(); 
     notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT; 

     mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     mNotifyMgr.notify(myRequestCode, notification); 

     return START_STICKY; 
    } 
+0

Aber ich habe "\t notification.flags | = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT;" - Ist es nicht genug? trotzdem funktioniert es nicht, weil der Benutzer die Benachrichtigung überhaupt nicht ablehnen kann, es ist sticky. – TamarG

+0

ok, ich verstehe. Nehmen Sie dann diese Änderung zurück und nehmen Sie die Änderung 'notification.flags = Notification.FLAG_ONGOING_EVENT;' – ddb

+0

vor, versuchen Sie dies 'notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT; ', so entfernen Sie die' | 'in der Zuordnung – ddb