android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{3d705ba u0 com.example.musicapp/.MusicService} Kotlin
时间: 2023-11-09 20:11:48 浏览: 295
这个异常是因为在 Android O 及以上版本中,如果你想在后台启动一个服务并且让它运行在前台,则必须调用 `startForeground()` 方法。如果你没有这样做,系统将会抛出 `Context.startForegroundService() did not then call Service.startForeground()` 异常。
解决方法是在你的 `MusicService` 类的 `onCreate()` 方法中添加以下代码:
```kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationChannel = NotificationChannel(
"music",
"Music Player",
NotificationManager.IMPORTANCE_LOW
)
getSystemService(NotificationManager::class.java)?.createNotificationChannel(notificationChannel)
val notification = Notification.Builder(this, "music").build()
startForeground(1, notification)
}
```
这段代码会创建一个通知渠道并将你的服务置于前台。如果你还没有创建一个通知渠道,则需要先创建一个。
相关问题
android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{3d705ba u0 com.example.musicapp/.MusicService}
这个错误通常是因为你调用了 `Context.startForegroundService()` 方法,但是在服务启动后没有立即调用 `Service.startForeground()` 方法,导致系统认为服务没有正确地启动前台服务而抛出异常。
要解决此问题,请在服务的 `onCreate()` 方法中调用 `startForeground()` 方法,将服务设置为前台服务。例如:
```
@Override
public void onCreate() {
super.onCreate();
Notification notification = new Notification.Builder(this)
.setSmallIcon(R.drawable.icon)
.setContentTitle("Music Service")
.setContentText("Playing music")
.build();
startForeground(1, notification);
}
```
在这个示例中,我们在 `onCreate()` 方法中创建了一个前台通知,并将服务设置为前台服务。请注意,我们提供了一个唯一的通知ID(1),以便稍后可以使用该ID来更新或取消通知。
如果你需要在服务启动后稍后才设置前台通知,请确保在启动服务后立即调用 `startForeground()` 方法,否则你将会看到上述错误。
android开机广播启动service报错:Reason: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord怎么解决
个错误是由于在启动前台服务时没有调用startForeground()方法导致的。在Android O及以上版本中,启动前台服务时必须调用startForeground()方法,否则会抛出此异常。解决此问题的方法是在启动前台服务后立即调用startForeground()方法。以下是解决此问题的步骤:
1.在服务的onCreate()方法中调用startForeground()方法,将服务设置为前台服务。例如:
```java
@Override
public void onCreate() {
super.onCreate();
Notification notification = new Notification.Builder(this)
.setContentTitle("Foreground Service")
.setContentText("Running")
.setSmallIcon(R.drawable.ic_launcher)
.build();
startForeground(1, notification);
}
```
2.在服务的onDestroy()方法中调用stopForeground()方法,将服务从前台服务中移除。例如:
```java
@Override
public void onDestroy() {
super.onDestroy();
stopForeground(true);
}
```
阅读全文