当前位置: 首页 > 知识库问答 >
问题:

大图标位图在通知中显示为白色正方形?

邬博涉
2023-03-14

我在通知中使用的URL生成位图时遇到了这个问题。然而,在我的手机上,位图就像一个白色的小方块一样显示出来。我查了一下,发现很多帖子都是这样说的:通知中没有显示图标:显示的是白色方块

而且我确信通知的小图标确实是透明的。但是,对于大图标,我意识到大图标不可能是透明的,因为它实际上是我从URL生成的位图。我怎样才能绕过这个问题,并确保图像呈现正确,而不是大图标显示为白色正方形?以下是我的尝试:

notificationService.java:

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
            .setContentTitle(getString(R.string.app_name))
            .setContentText(remoteMessage.getNotification().getBody())
            .setTicker(remoteMessage.getFrom() + " has responded!")
            .setLargeIcon(AndroidUtils.getBitmapFromURL(remoteMessage.getNotification().getIcon()))
            .setAutoCancel(true)
            .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
            .setStyle(new NotificationCompat.BigTextStyle().bigText(remoteMessage.getNotification().getBody()))
            .setSmallIcon(R.drawable.ic_tabs_notification_transparent);
public static Bitmap getBitmapFromURL(String userId) {
        try {
            URL imgUrl = new URL("https://graph.facebook.com/" + userId + "/picture?type=large");
            InputStream in = (InputStream) imgUrl.getContent();
            Bitmap  bitmap = BitmapFactory.decodeStream(in);
            Bitmap output;
            Rect srcRect;
            if (bitmap.getWidth() > bitmap.getHeight()) {
                output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
                srcRect = new Rect((bitmap.getWidth()-bitmap.getHeight())/2, 0, bitmap.getWidth()+(bitmap.getWidth()-bitmap.getHeight())/2, bitmap.getHeight());
            } else {
                output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.Config.ARGB_8888);
                srcRect = new Rect(0, (bitmap.getHeight()-bitmap.getWidth())/2, bitmap.getWidth(), bitmap.getHeight()+(bitmap.getHeight()-bitmap.getWidth())/2);
            }

            Canvas canvas = new Canvas(output);

            final int color = 0xff424242;
            final Paint paint = new Paint();
            final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

            float r;

            if (bitmap.getWidth() > bitmap.getHeight()) {
                r = bitmap.getHeight() / 2;
            } else {
                r = bitmap.getWidth() / 2;
            }

            paint.setAntiAlias(true);
            canvas.drawARGB(0, 0, 0, 0);
            paint.setColor(color);
            canvas.drawCircle(r, r, r, paint);
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
            canvas.drawBitmap(bitmap, srcRect, rect, paint);
            return output;
        } catch (IOException e) {
            FirebaseCrash.report(e);
            return null;
        }

显示我的问题的图像:

编辑:build.gradle文件显示:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    defaultConfig {
        applicationId '<ID>'
        multiDexEnabled true
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 12
        versionName ".12"
        signingConfig signingConfigs.Tabs
    }
    buildTypes {
        release {
            minifyEnabled false
            shrinkResources false
            zipAlignEnabled true
            debuggable false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.Tabs
        }
        debug {
            applicationIdSuffix ".debug"
            debuggable true
            minifyEnabled false
            signingConfig signingConfigs.Tabs
        }
    }
    //DatabaseReference stuff
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
        exclude 'META-INF/NOTICE'
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
    productFlavors {
    }
}

共有1个答案

燕正卿
2023-03-14
try {
            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
            mBuilder.setSmallIcon(getNotificationIcon());
            Bitmap icon = BitmapFactory.decodeResource(CXGcmListenerService.this.getResources(), R.drawable.ic_launcher);
            mBuilder.setLargeIcon(icon);
            //Define sound URI
            Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            mBuilder.setContentIntent(pendingIntent);
            mBuilder.setContentText(msg);
            mBuilder.setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(msg));
            mBuilder.setContentTitle(getString(R.string.app_name));
            mBuilder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
            mBuilder.setAutoCancel(true);
            mBuilder.setSound(soundUri); //This sets the sound to play
            Intent intent = new Intent(CXGcmListenerService.this, CXMainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            PendingIntent notificationIntent = PendingIntent.getActivity(this, 0, intent, 0);
            mBuilder.setContentIntent(notificationIntent);

            NotificationManager notifyManager = (NotificationManager) CXGcmListenerService.this.getSystemService(Context.NOTIFICATION_SERVICE);
            NOTIFICATION_ID++;
            notifyManager.notify("" + System.currentTimeMillis(), NOTIFICATION_ID, mBuilder.build());
        } catch (Resources.NotFoundException e) {
            CXLog.e(TAG, "" + e.getLocalizedMessage(), e);
        }

请尝试此操作以获取通知中的图标。

 类似资料:
  • 我正在将Firebase云消息与我的Flatter应用程序一起使用。 我正在使用Firebase控制台向我的应用发送推送通知。 我的问题是关于Android上的通知图标。 我用Android Asset Studio创建了一个图标,如下所示: 然后,我将下载的资产包含在各自的文件夹中,位于android/app/main/res/mipmap。 在清单上,我已经包含了所需的元数据代码: 但是当发送

  • 我的应用程序生成了一个通知,但我为该通知设置的图标没有显示。取而代之的是一个白色的方块。 我试过调整图标的png大小(尺寸720x720,66x66,44x44,22x22)。奇怪的是,当使用较小的尺寸时,白色的正方形更小。 我搜索了这个问题,以及生成通知的正确方法,从我读到的代码来看,应该是正确的。不幸的是,事情并不像他们应该的那样。

  • 当我的Android手机(Andoid 8.0)收到应用程序的推送通知时,图标为空白/白色。当我使用和一个具有透明背景的图标时,它可以工作,但当我这样做时,我的应用程序图标没有背景,我不希望这样。 如有任何帮助,我们将不胜感激!

  • 我正在使用pushwoosh提供推送通知服务。根据Android文档,我使用了一个白色图标作为通知。但在一些设备上,我又看到了白色方块。 另一方面,我使用了一个彩色图标,我看到了彩色通知。为什么在某些设备上我可以使用彩色图标,而在另一些设备上,我总是看到白色图标?

  • 我今天的通知图标有一个奇怪的问题。 我做了什么坏事吗? 这是我的图标图片(刚从这里下载https://material.io/icons/#ic_photo) : http://image.noelshack.com/fichiers/2016/44/1478185219-icon-notification.png 我错过什么了吗? 作为记录,我使用的是SDK 24,目前只创建了hdpi资源文件夹