我正确地记得,使用Android Oreo,该系统在电池消耗方面有了更多的限制,例如,向用户显示当前正在后台运行的应用程序,这会耗尽电池寿命。
这也显示在我的应用程序中(即使应用程序未在前台运行,在后台扫描BLE设备),指出
AppName在后台运行。点击以获取有关电池的详细信息,然后 数据用量
我的问题是,是否和如何我将能够与更多面向用户的通知(例如,
)交换此文本AppName由于XYZ原因在后台运行
即使是带有特定图标的通知等,
我已经尝试过
在应用程序中创建自定义通知渠道。
使用startForegroundService
在Oreo设备上启动服务。
从服务的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正在后台运行”。
是否甚至可以更改此设置?
谢谢您提前提出酸味建议:)
答案 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"/>