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

时间:2017-07-21 10:00:37

标签: android push-notification

我尝试使用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等)中,未显示通知横幅。 通知会在动作托盘中滑动并发出声音并振动。

但在少数设备中,当应用程序关闭/后台/前景时,它会完美显示。正确弹出的设备使用marshmallow。这是由于特定的操作系统?或者是与设备相关的问题?我需要添加什么额外的东西?

6 个答案:

答案 0 :(得分:4)

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

第1步:转到设置>

第2步:搜索"电池优化" >

第3步:点击"未优化的应用" ,然后切换到"所有应用。&# 34;

第4步:搜索您的应用(其中您未收到通知)

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

第1步:转到设置>应用

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

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

第4步:点击屏幕顶部的下拉菜单,其中显示:"未优化的应用[v]" - >更改为[所有应用]

第5步:选择您的应用并进行更改"未优化"。

答案 1 :(得分:3)

在MI或OPPO等中国设备中。系统关闭非白名单应用程序的通知服务。因此,您无能为力。只需要求他们将您的应用程序列入白名单(一般情况下发生的惨淡机会),或者使用hack始终将您的应用程序保存在内存中,比如运行一些空白的后台服务24 * 7

答案 2 :(得分:1)

首先尝试使用最小通知属性。尝试使用以下代码,该代码在我的应用中正常运行如果它有效,则可以通过启用一个通知属性来调试代码。

 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()); 
}

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

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

需要在设置中启用“#!/usr/bin/env ruby require 'rubyfunction1' require 'rubyfunction2' ” - > app - >通知。

答案 5 :(得分:0)

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