Android - 通知图标不会改变

Posted

技术标签:

【中文标题】Android - 通知图标不会改变【英文标题】:Android - Notification icon will not change 【发布时间】:2017-02-15 22:05:09 【问题描述】:

如何更改通知中的图标和大图标?我正在尝试这段代码:

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        Notification notification = builder
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setWhen(System.currentTimeMillis())
            .setAutoCancel(true)
            .setContentTitle("title")
            .setContentText("text").build();

        notificationManager.notify(666, notification);

这很好用,通知已显示。但是通知仍然像application icon一样,而不是来自android drawable"stat_notifi_more",为什么?

而且STATUS BAR ICON(左上角电池、wifi 等旁边的通知小图标)也没有显示!

有人可以帮我解决这个问题吗?

编辑:我有 lollipop 5.1.1 和 android 24 (sdk)

EDIT2

通知图标(OK)(96x96px):

状态栏图标(24x24px)(不行,默认应用程序图标):

真实状态栏图标:

通知来源:

// Using RemoteViews to bind custom layouts into Notification
            RemoteViews remoteViews = new RemoteViews(getPackageName(),
                    R.layout.notification_layout);

            // Set Notification Title
            String strtitle = "title";
            // Set Notification Text
            String strtext = "text";

            // Open NotificationView Class on Notification Click
            Intent intent = new Intent(this, MainActivity.class);
            // Send data to NotificationView Class
            intent.putExtra("title", strtitle);
            intent.putExtra("text", strtext);
            // Open NotificationView.java Activity
            PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

            // Locate and set the Image into customnotificationtext.xml ImageViews
            remoteViews.setImageViewResource(R.id.imagenotileft, R.drawable.stacionar_xhdpi_green);

            // Locate and set the Text into customnotificationtext.xml TextViews
            remoteViews.setTextViewText(R.id.title, "title");
            remoteViews.setTextViewText(R.id.text, "content");

            NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.wall_black)
                    .setTicker("t")
                    .setContentIntent(pIntent)
                    .setContent(remoteViews);

            // Create Notification Manager
            NotificationManager notificationmanager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            // Build Notification with Notification Manager
            notificationmanager.notify(0, builder.build());

xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_ >

    <ImageView
        android:id="@+id/imagenotileft"
        android:layout_
        android:layout_ />

    <TextView
        android:id="@+id/title"
        android:layout_
        android:layout_
        android:layout_toRightOf="@+id/imagenotileft" />

    <TextView
        android:id="@+id/text"
        android:layout_
        android:layout_
        android:layout_below="@+id/title"
        android:layout_toRightOf="@+id/imagenotileft" />
</RelativeLayout>

【问题讨论】:

问题出在notificationId上。你已经调用了魔鬼通知。你现在需要驱除你的代码。 【参考方案1】:

Android 通知将始终显示应用程序图标。您需要创建一个custom notification layout 来显示应用程序图标以外的图标。在这里,您可以使用任何您想要的图标/设计。

setSmallIcon() 设置出现在状态栏而不是通知托盘中的通知图标。您在此处分配的可绘制对象的尺寸应该非常小。检查预期大小here。我相信您的可绘制对象大于预期大小,因此无法渲染它。因此,您无法在状态栏中看到它。

编辑:状态栏中的小图标将始终为白色,因此不会显示您的红色和绿色。我认为你看不到绿色是因为颜色的半透明性质。即使您的可绘制对象具有纯红色或绿色,它也只会显示为白色圆圈。 这个SO Question 有关于它的详细信息。因此,我的建议是,您只需为小图标使用默认应用程序图标,并在通知托盘中为通知使用您想要的任何自定义图标。

【讨论】:

很好,自定义通知布局效果很好。状态栏图标现在也可见,但是状态栏图标是默认的应用程序图标,你知道为什么吗? (状态栏图标在设置中被禁用...)@suku 我正在使用 setSmallIcon,就像问题@suku 哦,我认为您需要始终设置 setsmallicon ...至少在早些时候您必须要不然通知崩溃 是的,我设置了小图标,但在状态栏中是默认应用程序图标(不是我的小图标),这是错误的,我需要更改此图标以及主图标@suku 它应该可以工作...drawable 的尺寸是多少?请在问题中添加状态栏屏幕截图。【参考方案2】:

如果您使用 Firebase 云消息传递: 要在应用程序处于后台时更改小图标,您可以从清单中进行:

        <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/notification_icon"
        android:value="@string/default_notification_channel_id" />

【讨论】:

以上是关于Android - 通知图标不会改变的主要内容,如果未能解决你的问题,请参考以下文章

点击android通知图标不会触发广播接收器

Android,当我更新我的图像时,为啥启动器图标和其他图像永远不会改变?

android状态栏通知图标

Firebase Cloud Messaging - 更改 Android 上 Web 通知的默认 Chrome 图标

如何在后台的android应用程序图标上计算推送通知消息徽章

如何将图像转换为通知图标以在 Android 应用程序中使用?