Android 11 - 前台服务通知不可见

Android 11 - Foreground service notification isn't visible

我有一个使用前台服务的 android 应用程序。我的前台服务应该显示通知。

我已将我的一台设备更新为 Android11,但未显示前台服务的通知。前台通知按预期工作,并且在所有以前的版本中都可见。

我用通知启动前台服务的代码如下:

        String channelName = "MyChannel";

        NotificationChannel chan = new NotificationChannel("com.my.package", channelName, NotificationManager.IMPORTANCE_NONE);
        chan.setLightColor(Color.BLUE);
        chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.createNotificationChannel(chan);

        RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.my_layout);
        remoteViews.setImageViewResource(R.id.my_notification_id, R.drawable.my_icon);
        remoteViews.setTextViewText(R.id.my_title, "Title");


        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, "com.my.package");

        notificationBuilder.setOngoing(true)
                .setSmallIcon(R.drawable.ic_image_icon)
                .setContentTitle("My Title")
                .setPriority(NotificationManager.IMPORTANCE_MIN)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setStyle(new android.support.v4.media.app.NotificationCompat.DecoratedMediaCustomViewStyle()
                        .setMediaSession(new MediaSessionCompat(context, MY_TAG).getSessionToken()))
                .setColor(0x169AB9)
                .setWhen(System.currentTimeMillis())
                .setOnlyAlertOnce(true)
                .setColorized(true);

   
        PendingIntent contentIntent = PendingIntent.getActivity(context, MYMConstants.NOTIFICATION_GO_TO_ACTIVITY_REQUEST_CODE,
                new Intent(context, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);

        notificationBuilder.setContent(remoteViews);
        notificationBuilder.setContentIntent(contentIntent);

        Notification notification = notificationBuilder.build();

        startForeground(10000, notification);

前台服务启动如下:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            context.startForegroundService(serviceIntent);
        } else {
            context.startService(serviceIntent);
        }

我搜索了关于 Android11 和前台服务基础更改的官方文档,但我找不到任何东西。有人可以帮我解决这个问题吗?

作为 Android 11 的一部分,将通知添加到前台服务的方式没有任何改变。

不过我确实找到了问题所在。上面的这段代码导致了问题。

.setStyle(new android.support.v4.media.app.NotificationCompat.DecoratedMediaCustomViewStyle()
                        .setMediaSession(new MediaSessionCompat(context, MY_TAG).getSessionToken()))

删除这个问题解决了。

要使用 setStyle(),我们需要将 android.support.v4.media.app 替换为 androidx.media.app.