覆盖默认的Oreo前台通知

时间:2018-07-09 14:56:52

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

我正确地记得,使用Android Oreo,该系统在电池消耗方面有了更多的限制,例如,向用户显示当前正在后台运行的应用程序,这会耗尽电池寿命。

这也显示在我的应用程序中(即使应用程序未在前台运行,在后台扫描BLE设备),指出

  

AppName在后台运行。点击以获取有关电池的详细信息,然后   数据用量

我的问题是,是否如何我将能够与更多面向用户的通知(例如,

)交换此文本
  

AppName由于XYZ原因在后台运行

即使是带有特定图标的通知等,

我已经尝试过

  1. 在应用程序中创建自定义通知渠道。

  2. 使用startForegroundService在Oreo设备上启动服务。

  3. 从服务的onCreate方法中,我致电

    startForeground(1, NotificationCompat.Builder(applicationContext, "my_channel_id")
                .setSmallIcon(R.drawable.some_icon)
                .setContentTitle("Title")
                .setContentText("AppName is running in the background for reason XYZ")
                .build())
    

但是所有发生的都是同一系统生成的通知,内容为“ AppName正在后台运行”。

是否甚至可以更改此设置?

谢谢您提前提出酸味建议:)

1 个答案:

答案 0 :(得分:0)

在您的服务中,在onStartCommand()中创建通知并设置其优先级。不要忘记在清单中添加android:enabled="true"

服务

override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
    super.onStartCommand(intent, flags, startId)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = NotificationChannel(
                    ANDROID_CHANNEL_ID,
                    ANDROID_CHANNEL_NAME,
                    NotificationManager.IMPORTANCE_HIGH
            )

            notificationManager.createNotificationChannel(channel)
        }

        val notification = NotificationCompat.Builder(this, ANDROID_CHANNEL_ID)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentTitle("Test title")
                .setContentText("Test content")
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setAutoCancel(true)

        startForeground(1, notification.build())

        return Service.START_NOT_STICKY
}

AndroidManifest

<service android:name=".utils.AppService"
         android:enabled="true"/>