8

Krótkie pytanie:Jak korzystać z NotificationCompat.Builder i startForeground?

Próbuję użyć klasy NotificationCompat.Builder w celu utworzenia powiadomienia, które będzie używane dla usługi, ale z jakiegoś powodu nie widzę powiadomienia lub nie anuluj go, gdy usługa powinna zostać zniszczona (lub zatrzymana z bycia na pierwszym planie).

mój kod:

@Override 
public int onStartCommand(final Intent intent, final int flags, final int startId) { 
    final String action = intent == null ? null : intent.getAction(); 
    Log.d("APP", "service action:" + action); 
    if (ACTION_ENABLE_STICKING.equals(action)) { 
     final NotificationCompat.Builder builder = new Builder(this); 
     builder.setSmallIcon(R.drawable.ic_launcher); 
     builder.setContentTitle("content title"); 
     builder.setTicker("ticker"); 
     builder.setContentText("content text"); 
     final Intent notificationIntent = new Intent(this, FakeActivity.class); 
     final PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
     builder.setContentIntent(pi); 
     final Notification notification = builder.build(); 
     // notification.flags |= Notification.FLAG_FOREGROUND_SERVICE; 
     // notification.flags |= Notification.FLAG_NO_CLEAR; 
     // notification.flags |= Notification.FLAG_ONGOING_EVENT; 

     startForeground(NOTIFICATION_ID, notification); 
     // mNotificationManager.notify(NOTIFICATION_ID, notification); 

    } else if (ACTION_DISABLE_STICKING.equals(action)) { 
     stopForeground(true); 
     stopSelf(); 
     // mNotificationManager.cancel(NOTIFICATION_ID); 
    } 
    return super.onStartCommand(intent, flags, startId); 
} 

komentowanym polecenia są moje próby, aby to działało. żaden z nich nie zadziałał z jakiegoś powodu.

Dodałem nawet fałszywą działalność, ponieważ wymagało contentIntent, ale nadal nie działa.

Czy ktoś może pomóc?

+0

Ten post, wraz z przyjętą odpowiedzi, stałe mój problem po przepracowaniu dni na rozwiązanie. –

Odpowiedz

9

Miałem dokładnie ten sam problem jakiś czas temu i odkryłem, że z jakiegoś powodu identyfikator powiadomienia 0 nie działa dobrze z startForeground(), czy jest to wartość NOTIFICATION_ID w kodzie?


EDIT: dokumentacja została zaktualizowana do stwierdzenia, że ​​0 jest nieważny ID

+0

tak. to jest. nie myślałem o zmianie, ponieważ zwykle zaczynam od tego numeru dla wszystkiego ... na pewno to naprawi? –

+0

Znalazłem odpowiedź [tam] (http://stackoverflow.com/questions/8725909/startforeground-does-not-show-my-notification), najwyraźniej jest znana. Naprawiono go zarówno dla mnie, jak i OP tego posta, więc powinien również rozwiązać twój problem. Najlepszym sposobem na poznanie jest wypróbowanie :) – Joffrey

+0

za każdym razem mówię sobie, że nie mogę znaleźć żadnego dziwniejszego błędu na Androidzie ... –