0

对于我的应用程序,我使用实现 SensorEventListener 的服务。该服务从可穿戴设备收集传感器数据。在此服务中,我启动通知。上周,当我测试我的应用程序时,一切正常。但是突然我的可穿戴设备在我的服务处于前台时没有显示通知。即使是我的应用程序的旧版本也不再显示通知。这非常令人困惑。所以,为了解决这个问题,这样做:

  1. 我测试了我的服务是否真的在前台:是的,确实是。在控制台上,我还可以看到手表确实在收集数据,因此该服务完成了它的工作。
  2. 然后我查看了stackoverflow,发现可能是我的应用程序静音了:我在手机、可穿戴设备和Google Wear 应用程序上搜索它,但什么也没找到。所以我重置了我的手表,拿了另一部安装了 Google Wear 应用程序的手机。之后,我将可穿戴设备与手机配对。然后我在“新”手机上部署了我的应用程序并观看:没有可见的通知。我还更改了 application-Id 以查看是否有任何更改:否。
  3. 我有我当前应用程序的旧版本,我 100% 确定通知确实出现了。我检查了它们:通知不再可见。

我不知道该怎么办。我的服务启动了,它确实在前台,并且看起来应用程序没有静音。

我在我的服务的 onCreate() 中设置了通知:

 Notification.Builder builder = new Notification.Builder(this);
    builder.setContentTitle("TestApplication");
    builder.setContentText("Collecting sensor data..");
    builder.setSmallIcon(R.drawable.ic_launcher);

    startForeground(1, builder.build());

在 onCreate() 中,我还检查我的服务是否在前台。我用来做这件事的方法是这样的(它是从另一个stackoverflow代码复制粘贴,几乎没有变化):

private boolean isServiceRunningInForeground(String serviceName){
    boolean serviceRunning = false;
    ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> l = am.getRunningServices(50);
    Iterator<ActivityManager.RunningServiceInfo> i = l.iterator();
    while (i.hasNext()) {
        ActivityManager.RunningServiceInfo runningServiceInfo = i
                .next();

        if(runningServiceInfo.service.getClassName().equals(serviceName)){

            if(runningServiceInfo.foreground)
            {
                return true;
            }
        }
    }
    return false;
}
4

1 回答 1

0

问题是我在使用 SDK 版本 26 时尝试使用 Notification.Builder 创建通知。不知道使用 SDK 26 我必须将 NotificationCompat.Builder 与通知通道一起使用。

因此,对于遇到相同问题的每个人: - 将您的 SDK 更改为较低版本或 - 使用 NotificationCompat.Builder(Context context, String notificationChannel) 而不是 Notification.Builder

于 2018-06-10T17:41:12.320 回答