Android 推送通知横幅未在某些设备中显示

Posted

技术标签:

【中文标题】Android 推送通知横幅未在某些设备中显示【英文标题】:Android push notification banner not showing up in some devices 【发布时间】:2017-07-21 10:00:37 【问题描述】:

我尝试使用NotificationCompat 推送通知:

NotificationCompat.Builder b = new NotificationCompat.Builder(this);
            b.setAutoCancel(true)
                    .setDefaults(NotificationCompat.DEFAULT_ALL)
                    .setWhen(System.currentTimeMillis())
                    .setSmallIcon(this.getResources().
                        getIdentifier("ic_launcher", "mipmap", this.getPackageName()))
                    .setLargeIcon(BitmapFactory.decodeResource(this.getResources(),
                        this.getResources().
                        getIdentifier("ic_launcher", "mipmap", this.getPackageName())))
                    .setTicker("God Reacts")
                    .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                    .setPriority(Notification.PRIORITY_MAX)
                    .setContentTitle(data.get("lineOne"))
                    .setContentText(data.get("lineTwo"))
                    .setContentInfo("Spread the message !");

            PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
                    new Intent(this,getMainActivityClass()),
                    PendingIntent.FLAG_UPDATE_CURRENT);
            b.setContentIntent(contentIntent);
            NotificationManager nm = (NotificationManager) 
            this.getSystemService(Context.NOTIFICATION_SERVICE);
            nm.notify(1, b.build());

但在少数设备(三星、MI 等)中未显示通知横幅。 通知会随着声音和振动在操作托盘中滑动。

但在少数设备中,当应用程序关闭/后台/前台时,它会完美显示。它正确弹出的设备使用棉花糖。是由于特定的操作系统吗?还是与设备相关的问题?我需要补充什么?

【问题讨论】:

只是一些特殊情况,一些设备可能会安装通知清理应用程序,他们可以清理你的通知。我以前遇到过这个问题,它完全让我发疯。也许你可以检查一下。 @Spark.Bao 我不这么认为。我在没有通知清理应用程序的情况下在 2 个真实设备上检查过。我不明白这些问题发生的原因 你检查过这个吗:***.com/questions/29522254/…? @josealfonsomora 是的,我做到了。 【参考方案1】:

由于电池优化,某些牛轧糖版本的设备可能会出现问题。例如三星 Galaxy S8 和 S8+、一加、小米等,但在 android 版本牛轧糖中, 您可以尝试一次,因为您必须检查一次设置,

第 1 步: 转到设置 >

第 2 步:搜索“电池优化” >

第 3 步:从此处点击“未优化的应用”,然后切换到“所有应用”。

第 4 步:搜索您的应用(您不会收到通知)

第 5 步:点按您的应用名称并将其设置为未优化,以便它可以接收通知。

第 1 步:转到设置 > 应用

第2步:点击右上角的:菜单,选择> [特殊访问]

第 3 步: 选择 > 优化电池使用 >

第 4 步:点击屏幕顶部的下拉菜单:“应用未优化 [v]”-> 更改为 [所有应用]

第 5 步:选择您的应用并将其更改为“未优化”。

【讨论】:

感谢您的回答。但问题在旧版本中仍然存在(例如 kitkat) 好吧!!会尝试其他方法,如果有效,会更新您。【参考方案2】:

在 MI 或 OPPO 等中国设备中。系统会关闭未列入白名单的应用程序的通知服务。因此,您无能为力。只需要求他们将您的应用列入白名单(一般情况下发生的可能性很小),或者使用一种技巧,以某种方式始终将您的应用保存在内存中,例如 24*7 运行一些空白后台服务

【讨论】:

我的应用确实运行了一些后台服务【参考方案3】:

首先尝试使用最小通知属性。尝试以下在我的应用程序中运行良好的代码。如果它有效,那么您可以通过启用通知的一个属性来调试您的代码。

 private void sendNotification(String messageBody) 
Intent intent = new Intent(this, NotificationActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_action_notification)
            .setContentTitle("Touchrooms Notification")
            .setContentText(messageBody)
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 

【讨论】:

【参考方案4】:

当通知使用图标或图像并且无法加载该图标/图像时,我遇到了类似的问题。您可以通过更改那些将图标从资源设置为通过res_id 加载图标的行来轻松测试它,如下所示:

b.setSmallIcon(R.drawable.new_mail);
b.setLargeIcon(R.drawable.my_icon);

您当前加载这些图标的方法可能会在这些设备上失败,因此,通知会发出声音和振动,但不会出现可见内容。

【讨论】:

【参考方案5】:

问题出在某些设备的设置中。

需要从设置 -> 应用 -> 通知打开“Floating notifications”。

【讨论】:

您能否为您的解决方案添加更多细节? @arul 没有别的了。【参考方案6】:

有时设备设置中的“请勿打扰”选项仍然打开。如果是这样,请将其关闭,然后您就可以开始了。

【讨论】:

以上是关于Android 推送通知横幅未在某些设备中显示的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序未运行时,GCM 推送通知未在某些设备中显示

推送通知未在 Android 上显示

混合应用推送通知图标未在 Android 8 (Oreo) 上显示

收到推送通知时不显示横幅仅振动设备

推送通知未在 iOS 10 设备中显示

颤振推送通知图像未在所有设备上显示