Ich lade ein Bild vom Server als Bitmap herunter und konvertiere es in drawable. Jetzt möchte ich dieses drawable als Benachrichtigungssymbol verwenden. Aber das kann ich nicht. hier ist mein code:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(bitmap)
.setWhen(when)
.build();
das Symbol ist jedoch ein Wert für Resources Int. Wenn ich es verwendet habe, gibt es einen Fehler. Irgendeine Hilfe
Bearbeiten:
Jetzt aktualisiere ich meinen Code und jetzt mache ich so:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(icon)
.setLargeIcon(bitmap)
.setWhen(when)
.build();
es gibt jedoch ein großes Symbol auf der linken Seite und ein kleines Symbol auf der rechten Seite. Ich möchte dies nicht, deshalb entferne ich die setSmallIcon-Zeile und führe meinen Code aus, aber er zeigt mir keine Benachrichtigungen
Wenn Sie die Entwicklerdokumente lesen, die für Notification.Builder
spezifisch sind, werden Sie feststellen, dass setSmallIcon(int icon)
ein Eine Ressourcen-ID im Paket der Anwendung des Zeichnungsobjektsbenötigt.
Wenn Sie ein Bild herunterladen, in eine Bitmap konvertieren und es dann auf setSmallIcon()
setzen, wird immer noch ein Fehler angezeigt.
Selbst wenn Sie die Bitmap
in eine Drawable
konvertieren würden, zum Beispiel wie folgt:
Drawable d = new BitmapDrawable(getResources(), bmpFinal);
es wird immer noch ein Fehler ausgegeben, da Drawable
nicht in Ihrem Anwendungspaket vorhanden ist.
Die einzig mögliche Lösung ist, eine Drawable
-Ressource zu verwenden, die sich in Ihrer package
befindet, und diese auf die setSmallIcon()
-Methode zu setzen. Typische Verwendung:
builder.setSmallIcon(R.drawable.ic_launcher);
Alternativ erfordert die setLargeIcon (Bitmap icon)
eine Bitmap-Instanz. Ohne zusätzliche Änderungen an Ihrem aktuellen Code vornehmen zu müssen (da Sie bereits über eine Bitmap
verfügen), können Sie diesen so verwenden, wie er ist, wenn er Ihrer Anforderung entspricht.
Wenn nicht, müssen Sie eine Drawable
-Ressource verwenden, die sich bereits in einem der drawable
-Ordner befindet.
sie können diese Methode ausprobieren
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
http://javatechig.com/Android/android-notification-example-using-notificationcompat
Es gibt einige Punkte zu dieser Frage, die hauptsächlich mit API 23+ zusammenhängen. Wenn Sie nur an setSmallIcon interessiert sind, gehen Sie zum zweiten und dritten Thema.
1 :
Sie können das LargeIcon wie folgt aus einer Drawable (anstelle der Ressourcen-ID) festlegen
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.
Wenn Sie ein kleines Symbol in der API unter 23 setzen müssen, müssen Sie eine Ressourcennummer wie R.drawable.your_resource
..__ festlegen. Mit NotificationCompat.Builder
können Sie keine Drawables oder Bitmaps in setSmallIcon()
verwenden.
3.
glücklicherweise wurde die Unterstützung auf Icon
auf setSmallIcon()
in Version 23+ erweitert, wobei der Notification.Builder wie folgt verwendet wurde:
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);
Bessere Option, Anwendungssymbol zu erhalten
Drawable drawable=getApplicationInfo().loadIcon(getPackageManager());
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)
Es ist sehr wichtig, das Bild transparent zu machen