doublesymmetry / react-native-track-player

A fully fledged audio module created for music apps. Provides audio playback, external media controls, background mode and more!
https://rntp.dev/
Apache License 2.0
3.25k stars 1.01k forks source link

[Android] com.facebook.react.bridge.ReadableNativeMap cannot be cast to java.lang.Double #2213

Closed bulkinav closed 9 months ago

bulkinav commented 10 months ago

Describe the Bug The app crashes if try to rewind the track via Media controls.

Steps To Reproduce

  1. Play track via 'react-native-track-player' -> player shows in Quick Settings area of Android
  2. Forward/rewind the track in Quick Settings -> the app is crashing:
FATAL EXCEPTION: mqt_native_modules
Process: com.ipspirates.ort, PID: 9866
java.lang.ClassCastException: com.facebook.react.bridge.ReadableNativeMap cannot be cast to java.lang.Double
    at com.facebook.react.bridge.ReadableNativeArray.getDouble(ReadableNativeArray.java:92)
    at com.facebook.react.bridge.JavaMethodWrapper$3.extractArgument(JavaMethodWrapper.java:55)
    at com.facebook.react.bridge.JavaMethodWrapper$3.extractArgument(JavaMethodWrapper.java:51)
    at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:356)
    at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:188)
    at com.facebook.jni.NativeRunnable.run(Native Method)
    at android.os.Handler.handleCallback(Handler.java:958)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
    at android.os.Looper.loopOnce(Looper.java:205)
    at android.os.Looper.loop(Looper.java:294)
    at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:228)

Environment Info: react-native-track-player 4.0.1 (not affected in 3.2.0)

Android 14, Google Pixel 5a

Screenshot 2023-12-03 at 17 37 31

lovegaoshi commented 10 months ago

wahts your RemoteSeek setting? seems like ur not passing a number here


  TrackPlayer.addEventListener(Event.RemoteSeek, event => {
    console.log('Event.RemoteSeek', event);
    TrackPlayer.seekTo(event.position);
  });
bulkinav commented 10 months ago

@lovegaoshi thanks, it's work. Although in the documentation position still gives seconds without event.

adamblvck commented 9 months ago

For ease of development to other developers, please add something like

// Events, when triggered, pass available parameters into a single variable
// which can then be deconstructed into the explicitly listed parameters below on this page. For example:

TrackPlayer.addEventListener(Event.RemoteSeek, event => {
    // pick out position from event
    console.log('Event.RemoteSeek parameter position', event.position);

    // do something with position
    TrackPlayer.seekTo(event.position);
});

to this documentation page, as it's not clear how Event passes its parameters down to a callback.