对于我的应用程序,我使用实现SensorEventListener的服务。该服务从可穿戴设备收集传感器数据。在这项服务中,我开始通知。上周,当我测试我的应用程序时,一切正常。但是突然我的可穿戴设备在我的服务处于前台时没有显示通知。即使旧版本的应用也不再显示通知。这非常令人困惑。所以,解决这个问题就是这样做的:
我不知道该怎么做。我的服务开始了,它确实在前台,看起来应用程序没有静音。
我在我的服务的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;
}
答案 0 :(得分:0)
问题是我尝试使用SDK版本26时使用Notification.Builder创建通知。我不知道使用SDK 26我必须使用NotificationCompat.Builder和通知通道。
所以,对于遇到同样问题的每个人: - 将SDK更改为较低版本或 - 使用NotificationCompat.Builder(Context context,String notificationChannel)代替Notification.Builder