安卓通知仅在状态栏显示图标

11

在我的应用程序中,我编写了一个简单的通知函数,该方法仅在状态栏上显示图标,我希望还能够显示通知布局,但它不会自动显示,我需要拉下Android状态栏才能看到。

public static void createNotification(Context context, Class activity, String title, String subject, int count_unread_message) {

    Intent intent = new Intent(context, activity);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

    Notification notify = new NotificationCompat.Builder(context)
            .setAutoCancel(true)
            .setContentTitle(title)
            .setContentText(subject)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setNumber(count_unread_message)
            .setPriority(0)

            .setLights(Color.BLUE, 500, 500)
            .setContentIntent(pendingIntent)
            .build();

    notify.flags |= Notification.FLAG_AUTO_CANCEL;

    NOTIFICATIONMANAGER = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    NOTIFICATIONMANAGER.notify(159753456, notify);
}

看起来这个问题是针对 Android 6 及以上版本的。

4个回答

4
对于我而言,通过在构建器(builder)上调用setDefaults(Notification.DEFAULT_ALL)来解决了这个问题。希望这可以帮到你。
保罗

在我的情况下,需要使用已弃用的方法 #setDefaults() 和 #setPriority()。 - DoruChidean

2
在通知的构建器(Builder)上添加setDefaults(Notification.DEFAULT_ALL)对我很有效。最初的回答。

2
我想您的问题是通知横幅没有显示,对吧?所以用户必须降低状态栏才能看到通知。
对于我来说,解决办法是将通知的优先级设置得更高。在您的情况下,应将其设置为高或最大值(因为它已经在0-默认值上了):
            .setPriority(1)//1 is high, 2 is max

参考文献:NotificationCompat.Builder文档

这篇文档介绍了如何使用NotificationCompat.Builder类的setPriority方法来设置通知的优先级。通知的优先级决定了它在系统状态栏中的显示顺序和可见性等级。该方法接受一个整数参数,范围从-2到2,其中-2表示最低优先级,2表示最高优先级,0表示默认优先级。


在我的情况下,需要使用已弃用的方法 #setDefaults() 和 #setPriority()。 - DoruChidean

1
在您的代码中添加.setLargeIcon(R.mipmap.ic_launcher)
Bitmap icon = BitmapFactory.decodeResource(context.getResources(),
                                           R.drawable.yourIcon);

 Notification notify = new NotificationCompat.Builder(context)
            .setAutoCancel(true)
            .setContentTitle(title)
            .setContentText(subject)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setLargeIcon(icon)//can set only bitmap images convert your drawable to bitmap
            .setNumber(count_unread_message)
            .setPriority(0)

            .setLights(Color.BLUE, 500, 500)
            .setContentIntent(pendingIntent)
            .build();

https://developer.android.com/reference/android/app/Notification.html#largeIcon


你确定问题是设置大图标吗?我收到了这个错误:Error:(224, 39) error: incompatible types: int cannot be converted to Bitmap - mahdi pishguy
不要解决问题,我没有看到通知,只能在状态栏上显示小的通知图标,我在Android 6.0.1上进行了测试,这是问题的原因吗?还是需要设置任何权限? - mahdi pishguy
.setLargeIcon(icon)在sdk v23中已被弃用,可能在Android 6.0.1中无法正常工作,请查看上面的文档链接。 - SaravInfern
在通知布局中,setLargeIcon 的工作正常,但我不确定问题是否出在 setLargeIcon 上。 - mahdi pishguy
您好,我看到您编辑了我的帖子,谢谢。但是先生,您没有理解我的意思,我又进行了编辑。请再次阅读 :) 问题仅在状态栏上显示图标,我也想显示布局。 - mahdi pishguy
我已经使用了setDefaults和setPriority,但通知仍然只出现在状态栏中。设置大图标有所帮助。 - nickeyzzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接