设置可绘制或位图作为图标在Android通知(Set Drawable or Bitmap as i

2019-08-31 09:27发布

我从服务器作为位图下载一个图像,并将其转换现在我想用这个作为绘制的通知图标来绘制。 但我无法做到这一点。 这里是我的代码:

    Notification notification = new NotificationCompat.Builder(context)

    .setContentTitle(title)

    .setContentText(message)

    .setContentIntent(intent)

    .setSmallIcon(bitmap)

    .setWhen(when)

    .build(); 

但图标,所以当我用它它给错误的资源int值。 任何帮助

编辑:

现在我更新我的代码和我现在做这样的:

          Notification notification = new NotificationCompat.Builder(context)

        .setContentTitle(title)

        .setContentText(message)

        .setContentIntent(intent)

        .setSmallIcon(icon)

        .setLargeIcon(bitmap)

        .setWhen(when)

        .build();

但它给在左侧的小图标右侧的大图标。 我不希望这所以为了这个,我删除setSmallIcon线和运行我的代码,但它不显示我的通知

Answer 1:

如果你读特定的开发者文档Notification.Builder你会看到setSmallIcon(int icon)需要在应用程序包中绘制使用的资源ID。

下载的图像转换为位图,然后将其设置为setSmallIcon()仍然想给你一个错误。

即使你是在转换Bitmap到一个Drawable这样的,例如:

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

它仍然是要给你一个错误,因为那Drawable 不会在你的应用程序包存在

唯一可能的解决方案是使用一个Drawable存在于你的资源package ,并将其设置为setSmallIcon()方法。 典型应用:

builder.setSmallIcon(R.drawable.ic_launcher);

可替代地, setLargeIcon (Bitmap icon)要求一个位图实例。 而不必在您的当前代码进行任何改变(因为你已经有一个Bitmap ),你可以使用,因为它是,它是否符合您的要求。

如果没有,你几乎必须使用一个Drawable的资源,是在一个已经存在drawable文件夹。



Answer 2:

你可以尝试使用这种方法

 builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));

http://javatechig.com/android/android-notification-example-using-notificationcompat



Answer 3:

有一个关于这个问题,主要是与API 23+相关的,如果你只在setSmallIcon感兴趣的一些点,到第二和第三主题。

第一名:

您可以设置从一个可绘制(的资源,而不是ID)的LargeIcon,如下所示

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);

第二:

如果您需要在API设置低于23的小图标,你将需要设置像一个资源ID R.drawable.your_resource 。 该NotificationCompat.Builder不允许使用可绘制或位图setSmallIcon()

第三:

幸运的是,支持已经扩大到Icon上型setSmallIcon()在23+版本,采用Notification.Builder,像下面:

 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);


Answer 4:

更好的选择,获得应用程序图标

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



.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)


文章来源: Set Drawable or Bitmap as icon In Notification in Android