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 推送通知横幅未在某些设备中显示的主要内容,如果未能解决你的问题,请参考以下文章