我可以将Android中的默认推送通知图标从app图标覆盖到自定义图标吗?
当推送通知到来时,我正在使用默认的firebase实现来在系统托盘中显示通知。由于我的应用程序图标是彩色的并且具有渐变,所以当收到通知时,android会尝试制作它的黑/白版本,并使其看起来像一个白色圆圈。
有没有办法将默认通知图标更新为其他内容而非默认应用图标?
PS:期待一个解决方案,它需要在清单中进行配置更改,并且不想使用NotificationCompat.Builder
答案 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);