Oreo-如何自定义前台服务状态栏

时间:2018-06-24 17:35:50

标签: android notifications android-8.0-oreo foreground-service

我启动了一个前台服务,该服务显示在android系统电池信息下的状态栏中。

是否可以自定义显示的信息(标题,副文本,图标等)?

enter image description here

服务代码:CODE EDITED

@Override
    public void onCreate() {
        context = this.getApplicationContext();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            Intent notificationIntent = new Intent(context, CallbackTestWidgetService.class);
            PendingIntent pendingIntent =
                    PendingIntent.getActivity(context, 10, notificationIntent, 0);

            Notification notification = new Notification.Builder(context, "Test")
                    .setContentTitle("Test")
                    .setContentText("text")
                    .setContentIntent(pendingIntent)
                    .setSmallIcon(R.drawable.test)
                    .setTicker("test")
                    .build();

CharSequence name = "test";
            String description = "test";
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel("10", name, importance);
            channel.setDescription("test");
            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);

            startForeground(10, notification);
        }

    }

3 个答案:

答案 0 :(得分:2)

您看到的是应用未发布通知时的默认通知。

之所以没有发布通知(尽管您调用startForeground)是因为您的目标是API 26或更高版本,并且未将通知与notification channel关联。这会导致您的通知完全按照该页面上的注释被丢弃:

  

警告:如果您以Android 8.0(API级别26)为目标并且在未指定通知渠道的情况下发布通知,则该通知不会出现,并且系统会记录错误。

您必须创建一个通知频道,然后在构建通知时包括该通知频道的ID。

答案 1 :(得分:0)

您正在构建要传递给startForeground的通知。使用createContentView函数,就像您要自定义的常规通知一样。

请注意,这仅适用于更新版本的Android,您可能想使用支持库中的NotiicationCompat类来支持特定于版本的api差异并在一些不同的仿真器API上进行测试。

答案 2 :(得分:0)

https://stackoverflow.com/users/4080424/narb https://stackoverflow.com/users/1676363/ianhanniballake

我无法通过调用setContentTitle(CharSequence)setContentText(CharSequence)来更改通知内容的标题和文本。 你知道为什么吗?