android.app.RemoteServiceException:错误的startForeground通知

问题描述 投票:2回答:1

我正在尝试如下启动前台服务:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    NotificationChannel chan = new NotificationChannel(
            getApplicationContext().getPackageName(),
            "My Foreground Service",
            NotificationManager.IMPORTANCE_LOW);
    chan.setLightColor(Color.BLUE);
    chan.setLockscreenVisibility(Notification.VISIBILITY_SECRET);

    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    assert manager != null;
    manager.createNotificationChannel(chan);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder( 
            this, "MyChannelId");
    Notification notification = notificationBuilder.setOngoing(true)
            .setSmallIcon(R.mipmap.my_icon)
            .setContentTitle("App is running on foreground")
            .setPriority(NotificationManager.IMPORTANCE_LOW)
            .setCategory(Notification.CATEGORY_SERVICE)
            .setChannelId("MyChannelId")
            .build();

    startForeground(1, notification);
}

此解决方案适用于Android 8.0模拟器。但是我在Android 8.1、9.0和10.0模拟器上收到以下错误。

android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=MyChannelId pri=2 contentView=null vibrate=null sound=null defaults=0x0 flags=0x42 color=0x00000000 category=service vis=PRIVATE)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1945)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

PS:我在非模拟器Android 9.0设备上尝试过,但未收到此错误。

java android service notifications android-notifications
1个回答
0
投票

正在发生问题,因为您正在创建带有ID的频道,但在其他ID中发送通知:

// Here, you are using the package name as channel ID
NotificationChannel chan = new NotificationChannel(
              getApplicationContext().getPackageName(), 
              "My Foreground Service",
              NotificationManager.IMPORTANCE_LOW);

// But here, you are sending notifications to "MyChannelId"
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder( 
              this, "MyChannelId");

所以,我相信您只需将Channel ID更改为MyChannelID,如下所示:

NotificationChannel chan = new NotificationChannel(
              "MyChannelId",
              "My Foreground Service",
              NotificationManager.IMPORTANCE_LOW);
© www.soinside.com 2019 - 2024. All rights reserved.