Notification mit kleinem und großem Icon

  • Antworten:4
  • Bentwortet
devnull1969
  • Forum-Beiträge: 11

15.02.2016, 08:12:46 via Website

Hallo zusammen,

ich habe einen Service, der über AlarmManager gestartet wird und (bei Bedarf) eine Notification ausgibt.

Die Notification wird wohl auch generiert ... das Handy vibriert, der Signalton ist zu hören, die LED blinkt. Aber: Die Notification-Message ist nicht zu sehen.

Ich vermute, es liegt an der Art und Weise, wie ich "versuche", die Message sowohl mit einem kleinen als auch einem großen Icon anzuzeigen. Diesen Code habe ich dazu gefunden:

Intent mainIntent = new Intent(this, OverviewActivity.class);
@SuppressWarnings("deprecation")
Notification noti = new Notification.Builder(this)
        .setAutoCancel(true)
        .setContentIntent(PendingIntent.getActivity(this, INTENT_ID, mainIntent,
                PendingIntent.FLAG_UPDATE_CURRENT))
        .setContentTitle("Gratuliere!")
        .setContentText("Du hast " + notifyText + " geschafft!")
        .setDefaults(Notification.DEFAULT_ALL)
        .setTicker("Du hast " + notifyText + " geschafft!")
        .setWhen(System.currentTimeMillis())
        .getNotification();
 // set icons
noti.contentView.setImageViewResource(R.drawable.small_icon, R.drawable.large_icon);
NotificationManager notificationManager
        = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFY_ID, noti);

Lasse ich den Teil mit "noti.contentView.setImageViewResource" weg und verwende stattdessen das folgende am NotificationBuilder:

.setSmallIcon(R.drawable.small_icon)

Dann wird die Notification angezeigt, jedoch nur mit einem kleinen (eher winzigen) Icon.

Wie kann ich es schaffen, dass an der Notification sowohl das kleine als auch das große Icon angezeigt werden?

Antworten
Henrik Martens
  • Forum-Beiträge: 607

15.02.2016, 09:03:18 via Website

Was meinst du mit "kleines UND großes" Icon?
Soll das Gerät sich dann aussuchen, welches es nimmt,oder sollen beide nebeneinander angezeigt werden?

Antworten
devnull1969
  • Forum-Beiträge: 11

15.02.2016, 09:20:41 via Website

Ich glaube, die Standard-Darstellung für beide zusammen ist: Die Notification zeigt das große Icon links und das kleine Icon als BADGE rechts unten davon

Das kleine Icon wird auch verwendet für die Statuszeile oben (z.B. im Home Screen)

Das große Icon dient (glaube ich) auch zur Darstellung des Icons im Ticker.

Antworten
devnull1969
  • Forum-Beiträge: 11

15.02.2016, 10:42:58 via Website

Ok, ich hab's selber herausgefunden.

Zwei Knackpunkte: Das LargeIcon wird (im Gegensatz zum SmallIcon) als Bitmap benötigt. Darüber hinaus muss dieses Bitmap auch noch auflösungsabhängig generiert werden (da ansonsten Anzeigefehler auftreten)

Bitmap myLargeIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.large_icon);

float multiplier = this.getResources().getDisplayMetrics().density/3f;
myLargeIcon = Bitmap.createScaledBitmap(myLargeIcon, (int)(myLargeIcon.getWidth()*multiplier), (int)(myLargeIcon.getHeight()*multiplier), false);

Intent mainIntent = new Intent(this, OverviewActivity.class);
@SuppressWarnings("deprecation")
Notification noti = new Notification.Builder(this)
        .setAutoCancel(true)
        .setContentIntent(PendingIntent.getActivity(this, INTENT_ID, mainIntent,
                PendingIntent.FLAG_UPDATE_CURRENT))
        .setContentTitle("Gratuliere!")
        .setSmallIcon(R.mipmap.small_icon)
        .setLargeIcon(myLargeIcon)
        .setContentText("Du hast " + notifyText + " geschafft!")
        .setDefaults(Notification.DEFAULT_ALL)
        .setTicker("Du hast " + notifyText + " geschafft!")
        .setWhen(System.currentTimeMillis())
        .getNotification();

Antworten