我可以将android中的默认推送通知图标从app图标覆盖到自定义图标吗?

时间:2016-06-09 10:28:48

标签: android push-notification notifications android-manifest android-6.0-marshmallow

我可以将Android中的默认推送通知图标从app图标覆盖到自定义图标吗?

当推送通知到来时,我正在使用默认的firebase实现来在系统托盘中显示通知。由于我的应用程序图标是彩色的并且具有渐变,所以当收到通知时,android会尝试制作它的黑/白版本,并使其看起来像一个白色圆圈。

有没有办法将默认通知图标更新为其他内容而非默认应用图标?

PS:期待一个解决方案,它需要在清单中进行配置更改,并且不想使用NotificationCompat.Builder

6 个答案:

答案 0 :(得分:25)

您可以根据https://firebase.google.com/docs/cloud-messaging/android/receive

在清单中使用此功能
import schedule
import threading
import time
import signal
import sys

class Controller(object):
    def __init__(self, name="controller", interval=1):
        self.name = name
        self.interval = interval

    def job(self):
        print("My name is {}.".format(self.name))


class ThreadController(threading.Thread):
    def __init__(self, *args, **kwargs):
        super(ThreadController, self).__init__()
        self.controller = Controller(*args, **kwargs)
        self._stop = threading.Event()

    def stop(self):
        self._stop.set()

    def stopped(self):
        return self._stop.isSet()

    def run(self):
        schedule.every(self.controller.interval).seconds.do(self.controller.job)
        while not self.stopped():
            schedule.run_pending()


def signal_handler(signum, frame):
    controller_threads = [thread for thread in threading.enumerate() if isinstance(thread, ThreadController)]
    for controller_thread in controller_threads:
        print("Stopping {}.".format(controller_thread))
        controller_thread.stop()
    sys.exit(1)

if __name__ == "__main__":
    controller1 = ThreadController(name="foo")
    controller2 = ThreadController(name="bar")

    signal.signal(signal.SIGINT, signal_handler)

    controller1.start()
    controller2.start()

    while True: time.sleep(0.1)         # Keep the main thread alive until interrupted

希望它有助于人们。

答案 1 :(得分:2)

您可以设置

  .setSmallIcon(int);
  .setLargeIcon(bitmap);

由setSmallIcon()

设置的小图标
NotificationCompat.Builder setLargeIcon (Bitmap icon)

设置自动收报机和通知中显示的大图标。

NotificationCompat.Builder中的

文档 - https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html

答案 2 :(得分:0)

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.custom_icon)
                .setContentTitle("FCM Message")
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

答案 3 :(得分:0)

你可以这样做:

int icon=R.drwable.icon; //Add your icon name here
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(icon);

答案 4 :(得分:0)

RuntimeException个对象的

Builder类。提供一种方便的方法来设置通知的各个字段,并使用平台的通知布局模板生成内容视图。查看官方文档here

Notification

您可以在此设置自定义字段,包括通知图标。

干杯!快乐编码

答案 5 :(得分:0)

是的,你可以这样做。如果你想避开白色圆圈图标,你必须让你的图标透明并添加背景颜色。所以你使用的颜色通过透明图标出现并使图标可见,色彩鲜艳。 请在下面的示例代码中检查setSmallIcon和setColor。Check this doc and search for transparent

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                context)
                .setContentIntent(contentIntent)
                .setSmallIcon(R.drawable.transaparentIcon)
                .setColor(context.getResources().getColor(R.color.notif_color))
                .setWhen(System.currentTimeMillis())
                .setContentTitle(context.getString(R.string.app_name))
                .setStyle(
                        new NotificationCompat.BigTextStyle()
                                .bigText(notificationText))
                .setContentText(notificationText)
                .setAutoCancel(true);