2013-04-17 11 views
12

Pobieram obraz z serwera jako bitmapę i konwertuję go na opcję rysowania, teraz chcę użyć tego losowania jako ikony powiadomienia. Ale nie jestem w stanie tego zrobić. tutaj jest mój kod:Zestaw Drawable lub Bitmap jako ikona W powiadomieniu w Androidzie

Notification notification = new NotificationCompat.Builder(context) 

    .setContentTitle(title) 

    .setContentText(message) 

    .setContentIntent(intent) 

    .setSmallIcon(bitmap) 

    .setWhen(when) 

    .build(); 

, ale ikona jest wartością Zasoby int, więc gdy jej użyłem daje błąd. Każda pomoc

Edit:

teraz zaktualizować kod i teraz robię tak:

  Notification notification = new NotificationCompat.Builder(context) 

     .setContentTitle(title) 

     .setContentText(message) 

     .setContentIntent(intent) 

     .setSmallIcon(icon) 

     .setLargeIcon(bitmap) 

     .setWhen(when) 

     .build(); 

ale daje dużą ikonę na lewym boku i małą ikonę po prawej stronie. Nie chcę tego tak do tego usunąć linię setSmallIcon i uruchomić mój kod, ale nie pokazuje mi powiadomienia

+1

http://stackoverflow.com/a/16051724/931982 ... se moja odpowiedź tutaj – stinepike

+0

dzięki @StinePike zobacz moje zredagowane pytanie – User42590

+0

lol z jakiegoś powodu nie wiem dlaczego ... mała ikona po prawej stronie nazywa się dużą ikoną .. tylko tam można ustawić bitmapę. W wyższej api możesz utworzyć własne powiadomienie z niestandardowym układem – stinepike

Odpowiedz

21

Jeśli czytać dokumenty programistów specyficzne Notification.Builder widać, że setSmallIcon(int icon) potrzebuje identyfikator zasobu w pakiet aplikacji do losowania do użycia.

Pobieranie obrazu, przekształcenie go w bitmapę, a następnie ustawienie na setSmallIcon() nadal może spowodować błąd.

Nawet jeśli było przekonwertować Bitmap Do Drawable tak na przykład:

Drawable d = new BitmapDrawable(getResources(), bmpFinal); 

wciąż jest zamiar dać błąd bo Drawable robi nie istnieje w pakiecie aplikacji.

Jedynym możliwym rozwiązaniem jest użycie zasobu Drawable, który istnieje w twoim package i ustawienie go na metodę setSmallIcon(). Typowe zastosowanie:

builder.setSmallIcon(R.drawable.ic_launcher); 

Alternatywnie, setLargeIcon (Bitmap icon) wymaga instancji Bitmap. Bez konieczności wprowadzania dodatkowych zmian w bieżącym kodzie (ponieważ masz już numer Bitmap), możesz użyć go w niezmienionym stanie, o ile spełnia twoje wymagania.

Jeśli nie, musisz użyć zasobu Drawable, który jest już obecny w jednym z folderów drawable.

+5

'setLargeIcon (Bitmap)' nie działa dla mnie btw. – m0skit0

6

Istnieje kilka punktów o tej kwestii, związanych głównie z API 23+, jeśli jesteś zainteresowany tylko w setSmallIcon, przejdź do 2 i 3 tematy.

1-ty:

Można ustawić LargeIcon z rozciągliwej (zamiast identyfikator zasobu), jak następuje

Drawable drawable= ContextCompat.getDrawable(this,R.drawable.your_drawable); 

      Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); 

      NotificationCompat.Builder mBuilder = 
        new NotificationCompat.Builder(context) 
          .setLargeIcon(bitmap) 
          .setContentTitle("hahah") 
          .setContentText("Tap to stop") 
          .setOngoing(true); 

2-ty:

Jeśli trzeba ustawić SmallIcon API poniżej 23, musisz ustawić identyfikator zasobu, taki jak R.drawable.your_resource. NotificationCompat.Builder nie zezwala na używanie Drawable s or Bitmaps in setSmallIcon() `.

3-ty:

szczęście, podpora została rozszerzona do Icon typu na setSmallIcon() w wersji 23+, używając Notification.Builder, jak następuje:

Drawable drawable = ContextCompat.getDrawable(this,R.drawable.your_drawable); 

      Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); 

      Notification.Builder mBuilder = 
        new Notification.Builder(context) 
          .setSmallIcon(Icon.createWithBitmap(bitmap)) 
          .setLargeIcon(bitmap) 
          .setContentTitle("hahah") 
          .setContentText("Tap to stop") 
          .setOngoing(true); 
+1

Dziękuję za ostatnią, mimo że nadal nie ma rozwiązania dla starej wersji. Dobrze wiedzieć, tak czy inaczej – Jenix

1

Lepsza opcja uzyskać ikonę aplikacji

Drawable drawable=getApplicationInfo().loadIcon(getPackageManager()); 
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); 



.setSmallIcon(getApplicationInfo().icon) 
.setLargeIcon(bitmap) 
Powiązane problemy