当前位置: 首页 > 知识库问答 >
问题:

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

段干瑞
2023-03-14

我正在尝试按以下方式启动前台服务:

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.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:我试了一个非模拟器的Android9.0设备,没有得到这个错误。

共有1个答案

唐星晖
2023-03-14

发生问题的原因是,您正在使用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");

所以,我相信您只需要将频道ID更改为mychannelid,如下所示:

NotificationChannel chan = new NotificationChannel(
              "MyChannelId",
              "My Foreground Service",
              NotificationManager.IMPORTANCE_LOW);
 类似资料:
  • 我试过后台服务这样的代码,但第一次报警后应用程序崩溃了。并给出了这个错误: Android.app.remoteserviceException:StartForeground的错误通知:java.lang.runtimeException:服务通知的无效通道:通知(通道=null pri=0 contentview=null dibrate=null sound=null defaults=0x

  • 所以,我有一个拥有50000用户的应用程序。最近我更新了我的android studio,把SDK编译成了27。我做了一些改变,以支持android 8的变化,包括通知的变化(例如,通知应该有唯一的渠道)。在Android One手机上测试了这个(运行android 8)。一切都很顺利。在更新playstore上的应用程序后,我在android 8设备上看到了这些崩溃(主要是谷歌Pixel手机)

  • 使用Phonegap推送通知,如下所示 http://devgirl.org/2013/07/17/tutorial-implement-push-notifications-in-your-phoneGap-application/ 在使用.apk构建.apk时,我得到了这个错误.. 失败 失败:生成失败,出现异常。 出了什么问题: null 总时间:15.085秒 错误:带有args:/s,/

  • 我订阅了Firebase Project,以便通过Web发送通知。 我准备了一个HTML页面来允许通知并获取实例ID令牌。一旦得到这个I.I.令牌,我就使用“REST控制台”发出POST请求来发送我的第一个通知。 以上是有关请求的更多信息: 让我解释一些密钥: -授权头:密钥是Firebase控制台中的服务器密钥。 -JSON中的“to”字段是我请求使用通知权限的HTML页面中出现的实例ID令牌。

  • 这是我的代码: 有谁能帮我解决这个问题吗

  • 下面是我在活动类的onCreate()方法中使用的代码。 帮助我解决这个问题。