对于我的应用程序,我使用实现 SensorEventListener 的服务。该服务从可穿戴设备收集传感器数据。在此服务中,我启动通知。上周,当我测试我的应用程序时,一切正常。但是突然我的可穿戴设备在我的服务处于前台时没有显示通知。即使是我的应用程序的旧版本也不再显示通知。这非常令人困惑。所以,为了解决这个问题,这样做:
- 我测试了我的服务是否真的在前台:是的,确实是。在控制台上,我还可以看到手表确实在收集数据,因此该服务完成了它的工作。
- 然后我查看了stackoverflow,发现可能是我的应用程序静音了:我在手机、可穿戴设备和Google Wear 应用程序上搜索它,但什么也没找到。所以我重置了我的手表,拿了另一部安装了 Google Wear 应用程序的手机。之后,我将可穿戴设备与手机配对。然后我在“新”手机上部署了我的应用程序并观看:没有可见的通知。我还更改了 application-Id 以查看是否有任何更改:否。
- 我有我当前应用程序的旧版本,我 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;
}