小编Ude*_*hUK的帖子

绑定服务崩溃与"Context.startForegroundService()然后没有调用Service.startForeground()"错误

我正在制作音频播放应用程序,我正在使用一个启动绑定服务在后台播放音乐.我使用以下代码启动并绑定到服务.

val intent = Intent(context, MusicService::class.java)
context.startService(intent)
context.bindService(intent, serviceConnection, 0)
Run Code Online (Sandbox Code Playgroud)

它在播放时被提升为前景,在音乐暂停时被降级.

// onAudioPlay
service.startForeground(NOTIFY_ID, notification)

// onAudioPause
service.stopForeground(false)
Run Code Online (Sandbox Code Playgroud)

到目前为止服务工作很好.但是当用户在暂停状态下刷新(删除)通知时,服务会在几秒钟后崩溃,从而出现此错误.

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myplayer, PID: 4380
    android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
        android.app.ActivityThread$H.handleMessage(ActivityThread.java:1775)
        android.os.Handler.dispatchMessage(Handler.java:105)
        android.os.Looper.loop(Looper.java:164)
        android.app.ActivityThread.main(ActivityThread.java:6541)
        java.lang.reflect.Method.invoke(Native Method)
      com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Run Code Online (Sandbox Code Playgroud)

这只发生在奥利奥上,我已经读过奥利奥的背景限制.但以下几点让我感到困惑.

  • 此服务是绑定服务(不受限制)
  • 我从不使用Context.startForegroundService()来启动服务.(并且不想使用它)
  • 当服务从前台降级时,服务不会崩溃,在删除通知时会发生这种情况.

为什么服务崩溃了?我究竟做错了什么?如果有人告诉我这里发生了什么,我会非常感激.

service android kotlin android-8.0-oreo

24
推荐指数
3
解决办法
2万
查看次数

Google Maps for Flutter - 拖动后获取标记的新位置

我想使用 Google Google Maps for Flutter和它的标记在 Flutter 中创建一个位置选择器。可以通过将可拖动选项设置为 true 来创建标记来创建可拖动标记。使用以下代码段。

Widget _buildMap(BuildContext context) {
  return GoogleMap(
    options: GoogleMapOptions(
      cameraPosition: CameraPosition(
        target: LatLng(7.2906, 80.6337),
        zoom: 7.0,
      ),
      compassEnabled: true,
    ),
    onMapCreated: (controller) {
      _mapController = controller;
      controller.addMarker(
        MarkerOptions(
          draggable: true,
          flat: false,
          position: LatLng(7.2906, 80.6337),
        ),
      );
    },
  );
}
Run Code Online (Sandbox Code Playgroud)

但是在拖动标记后我找不到获取标记新位置的方法。我试图通过引用 的markers属性来获取标记的新位置,MapController但它返回标记的初始位置。

_mapController.markers.forEach((marker) {
  print("Pos: " + marker.options.position.toString())
});

// Prints "Pos: LatLng[7.2906, 80.63369999999998]"
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么还是有另一种方法来完成这个用例?谢谢你。

google-maps marker dart flutter

0
推荐指数
1
解决办法
6933
查看次数