Originally created by @andonevris on GitHub (Sep 1, 2022).
Not sure if something changed recently but previously I could control playback skipping back and forwards from my watch via bluetooth connection to phone, since the last update skipping back still works but skipping forwards does not. Note this is for remote control, skipping still works from phone directly.
I should also add my watch and many other remote control devices only have a "next track" button so other podcast/audiobook players commandeer the "next track" command and translate that to skip forwards as it is far more useful to be able to skip rather than go to the next podcast or audiobook.
Steps to reproduce
Start book or podcast on phone
Attempt to skip forwards from bluetooth remote control
Nothing happens
Expected behaviour
Pressing next track should skip forwards as previously or at least have a setting, as is standard on many audio players, to choose whether user wishes to use that function for "next track" or "skip"
Actual behaviour
Nothing happens.
Environment data
Audiobookshelf Version:
v2.1.4
[ x] Android App?
iOS App?
Android Issue
Android version: 10
Device model: Galaxy S10
Stock or customized system: Stock, Rooted
Originally created by @andonevris on GitHub (Sep 1, 2022).
Not sure if something changed recently but previously I could control playback skipping back and forwards from my watch via bluetooth connection to phone, since the last update skipping back still works but skipping forwards does not. Note this is for remote control, skipping still works from phone directly.
I should also add my watch and many other remote control devices only have a "next track" button so other podcast/audiobook players commandeer the "next track" command and translate that to skip forwards as it is far more useful to be able to skip rather than go to the next podcast or audiobook.
### Steps to reproduce
1. Start book or podcast on phone
2. Attempt to skip forwards from bluetooth remote control
3. Nothing happens
### Expected behaviour
- Pressing next track should skip forwards as previously or at least have a setting, as is standard on many audio players, to choose whether user wishes to use that function for "next track" or "skip"
### Actual behaviour
- Nothing happens.
### Environment data
Audiobookshelf Version:
v2.1.4
- [ x] Android App?
- [ ] iOS App?
#### Android Issue
Android version: 10
Device model: Galaxy S10
Stock or customized system: Stock, Rooted
I have this problem too: when hitting the "skip ahead / next" button on remote device connected to the iPhone, nothing happens. Happy to help troubleshoot/test.
@Piste commented on GitHub (Jan 11, 2023):
I have this problem too: when hitting the "skip ahead / next" button on remote device connected to the iPhone, nothing happens. Happy to help troubleshoot/test.
There is a fix for the next release relating to play/pause from bluetooth.
Related issues #427#429#573
@advplyr commented on GitHub (Feb 12, 2023):
Is this still an issue in app version 0.9.61?
There is a fix for the next release relating to play/pause from bluetooth.
Related issues #427 #429 #573
Forward key does nothing, back key jumps all the way back to the beginning.
@andonevris commented on GitHub (Feb 12, 2023):
Yes still an issue, it was never fixed.
Forward key does nothing, back key jumps all the way back to the beginning.
I'm using a Garmin Fenix smart watch, it used to work fine but then something changed around September 2022
@andonevris commented on GitHub (Feb 12, 2023):
I'm using a Garmin Fenix smart watch, it used to work fine but then something changed around September 2022
Those others with issues with iOS are separate and was updated in the last release.
There is one other issue with Android bluetooth control and it is also a watch. Pebble smart watch #423
@advplyr commented on GitHub (Feb 12, 2023):
Those others with issues with iOS are separate and was updated in the last release.
There is one other issue with Android bluetooth control and it is also a watch. Pebble smart watch #423
Most likely. The best way to address this will be to build from source and watch the logcat while pressing the controls. I'm not sure what events these watches are firing.
@advplyr commented on GitHub (Feb 12, 2023):
Most likely. The best way to address this will be to build from source and watch the logcat while pressing the controls. I'm not sure what events these watches are firing.
It's not working with 0.9.62 beta, same behaviour forward does nothing and back goes all the way back to the beginning of the book/podcast.
Regarding which events are firing the watch says prev track / next track on the label. The other diagnostic stuff is above my level I'm afraid.
@andonevris commented on GitHub (Feb 26, 2023):
It's not working with 0.9.62 beta, same behaviour forward does nothing and back goes all the way back to the beginning of the book/podcast.
Regarding which events are firing the watch says prev track / next track on the label. The other diagnostic stuff is above my level I'm afraid.
After changing those it seems that everything else still work as before. It seems that controlling from Garmin watch won't trigger onCommand, onCustomAction nor onMediaButtonEvent so this is the only way how I managed solve this problem.
@ISO-B commented on GitHub (Oct 30, 2024):
Did some testing for this and found that using Garmin native audio controller triggers following functions
https://github.com/advplyr/audiobookshelf-app/blob/e2fc5bcbb1316ef397cff9b933927ae529b119da/android/app/src/main/java/com/audiobookshelf/app/player/MediaSessionCallback.kt#L72-L78
If we swap those to use same functions as fast forward and rewind then Garmin watch is able to control playback.
https://github.com/advplyr/audiobookshelf-app/blob/e2fc5bcbb1316ef397cff9b933927ae529b119da/android/app/src/main/java/com/audiobookshelf/app/player/MediaSessionCallback.kt#L80-L86
After changing those it seems that everything else still work as before. It seems that controlling from Garmin watch won't trigger [onCommand](https://developer.android.com/reference/android/support/v4/media/session/MediaSessionCompat.Callback#onCommand(java.lang.String,android.os.Bundle,android.os.ResultReceiver)), [onCustomAction](https://developer.android.com/reference/android/support/v4/media/session/MediaSessionCompat.Callback#onCustomAction(java.lang.String,android.os.Bundle)) nor [onMediaButtonEvent](https://developer.android.com/reference/android/support/v4/media/session/MediaSessionCompat.Callback#onMediaButtonEvent(android.content.Intent)) so this is the only way how I managed solve this problem.
I'm a bit late to the party, but I basically encountered the same issue.
In short
I'll raise a PR for the suggested fix of @ISO-B and hopefully this will be accepted and merged into the next version.
I was contemplating if this should be configurable as suggested by @andonevris but I rather keep things simple and on par with other input methods, see the following investigation.
Feel free to object here @advplyr.
Investigation on root cause
I did some further digging and here are my observations:
First I considered three different methods on playback skipping. 1) Via the app, 2) Via bluetooth headset 3) Via remote control (in my case a Garmin Fenix smart watch).
Due to lack of hardware I was not able to test this in an android auto environment.
Second I noticed a difference when choosing audiobooks with A) multiple files and B) Single file with chapter marks.
In the following I focus on the case next track (>|).
1) Control via the app
Everything tested works as expected, next track (>|) jumps to the next chapter and we have buttons to perform a time skip of 10 seconds (configurable).
Here the control input next track (>|) enters via PlayerNotificationService and the seekPlayer function.
Time to skip is provided by the UI, I'm unable to figure out how exactly.
2) Via bluetooth
With this method and my device I have the basic config options: play, pause, next and previous track.
Here the control input next track (>|) enters via the MediaSessionCallback and handled by the onMediaButtonEvent.
A KEYCODE_MEDIA_NEXT results in jumpForward a time skip of 10 seconds (configurable).
Here the control input next track (>|) enters via MediaSessionCallback and handled by the onSkipToNext.
The current implementation calls the skipToNext function of the PlayerNotificationService and this the currentPlayer.seekToNext().
Now comes the root cause of the issue described: What is 'next'?
In case A) where we have multiple files the next file is selected.
If the audiobook is chunked into files per chapter the skip works like in case 1) Control via the app
In case B) where we have a single audio file (with chapter marks) nothing happens.
The player internally tries to check hasNextMediaItem for the next thing but cannot find anything.
I do not know which control device has buttons for SkipToNext and FastForward at the same time which would be affected by this change.
But my observation that the behaviour with single files is still different would persists.
And another thing, on case B) with single file: pressing the control input previous track (|<) jumps to the start of the file which is really annoying.
Conclusion
Form a user view I want to cover the following case:
"Oh no, I somehow missed the last 40 seconds of my playback, let me quickly press back 4 times."
Thus changing the implementation for case 3) to work as it does in case 2) is sufficient.
Also other apps (AntennaPod) is using exactly the same behaviour.
If a user wants to skip a chapter there is always option 1) use the app with all 5 buttons :-)
@doofmars commented on GitHub (Feb 25, 2026):
I'm a bit late to the party, but I basically encountered the same issue.
## In short
I'll raise a PR for the suggested fix of @ISO-B and hopefully this will be accepted and merged into the next version.
I was contemplating if this should be configurable as suggested by @andonevris but I rather keep things simple and on par with other input methods, see the following investigation.
Feel free to object here @advplyr.
## Investigation on root cause
I did some further digging and here are my observations:
First I considered three different methods on playback skipping. 1) Via the app, 2) Via bluetooth headset 3) Via remote control (in my case a Garmin Fenix smart watch).
Due to lack of hardware I was not able to test this in an android auto environment.
Second I noticed a difference when choosing audiobooks with A) multiple files and B) Single file with chapter marks.
In the following I focus on the case next track (`>|`).
### 1) Control via the app
Everything tested works as expected, next track (`>|`) jumps to the next chapter and we have buttons to perform a time skip of 10 seconds (configurable).
Here the control input next track (`>|`) enters via `PlayerNotificationService` and the `seekPlayer` function.
Time to skip is provided by the UI, I'm unable to figure out how exactly.
### 2) Via bluetooth
With this method and my device I have the basic config options: play, pause, next and previous track.
Here the control input next track (`>|`) enters via the `MediaSessionCallback` and handled by the `onMediaButtonEvent`.
A `KEYCODE_MEDIA_NEXT` results in `jumpForward` a time skip of 10 seconds (configurable).
https://github.com/advplyr/audiobookshelf-app/blob/4fb9f6b92dbdb40ec6501f4e84782223806b4c46/android/app/src/main/java/com/audiobookshelf/app/player/MediaSessionCallback.kt#L230-L235
### 3) Via remote control
Here the control input next track (`>|`) enters via `MediaSessionCallback` and handled by the `onSkipToNext`.
The current implementation calls the `skipToNext` function of the `PlayerNotificationService` and this the `currentPlayer.seekToNext()`.
Now comes the root cause of the issue described: **What is 'next**'?
In case A) where we have multiple files the next file is selected.
If the audiobook is chunked into files per chapter the skip works like in case 1) Control via the app
In case B) where we have a single audio file (with chapter marks) nothing happens.
The player internally tries to check `hasNextMediaItem` for the next thing but cannot find anything.
https://github.com/advplyr/audiobookshelf-app/blob/4fb9f6b92dbdb40ec6501f4e84782223806b4c46/android/app/src/main/java/com/audiobookshelf/app/player/MediaSessionCallback.kt#L75-L77
I do not know which control device has buttons for `SkipToNext` and `FastForward` at the same time which would be affected by this change.
But my observation that the behaviour with single files is still different would persists.
And another thing, on case B) with single file: pressing the control input previous track (`|<`) jumps to the start of the file which is really annoying.
## Conclusion
Form a user view I want to cover the following case:
> "Oh no, I somehow missed the last 40 seconds of my playback, let me quickly press back 4 times."
Thus changing the implementation for case 3) to work as it does in case 2) is sufficient.
Also other apps (AntennaPod) is using exactly the same behaviour.
If a user wants to skip a chapter there is always option 1) use the app with all 5 buttons :-)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Originally created by @andonevris on GitHub (Sep 1, 2022).
Not sure if something changed recently but previously I could control playback skipping back and forwards from my watch via bluetooth connection to phone, since the last update skipping back still works but skipping forwards does not. Note this is for remote control, skipping still works from phone directly.
I should also add my watch and many other remote control devices only have a "next track" button so other podcast/audiobook players commandeer the "next track" command and translate that to skip forwards as it is far more useful to be able to skip rather than go to the next podcast or audiobook.
Steps to reproduce
Expected behaviour
Actual behaviour
Environment data
Audiobookshelf Version:
v2.1.4
Android Issue
Android version: 10
Device model: Galaxy S10
Stock or customized system: Stock, Rooted
@advplyr commented on GitHub (Sep 1, 2022):
This is from #328 for android auto
Update: this is not actually from that PR, must have been before that
@vpoluyaktov commented on GitHub (Sep 29, 2022):
The same problem on IOS devices
@Piste commented on GitHub (Jan 11, 2023):
I have this problem too: when hitting the "skip ahead / next" button on remote device connected to the iPhone, nothing happens. Happy to help troubleshoot/test.
@advplyr commented on GitHub (Feb 12, 2023):
Is this still an issue in app version 0.9.61?
There is a fix for the next release relating to play/pause from bluetooth.
Related issues #427 #429 #573
@andonevris commented on GitHub (Feb 12, 2023):
Yes still an issue, it was never fixed.
Forward key does nothing, back key jumps all the way back to the beginning.
@advplyr commented on GitHub (Feb 12, 2023):
What device are you using to press forward/backward?
@andonevris commented on GitHub (Feb 12, 2023):
I'm using a Garmin Fenix smart watch, it used to work fine but then something changed around September 2022
@advplyr commented on GitHub (Feb 12, 2023):
Are there other bluetooth devices that you use that are also not working?
@andonevris commented on GitHub (Feb 12, 2023):
I don't have any other devices I could test. Maybe some of the others who have this issue can help?
@advplyr commented on GitHub (Feb 12, 2023):
Those others with issues with iOS are separate and was updated in the last release.
There is one other issue with Android bluetooth control and it is also a watch. Pebble smart watch #423
@andonevris commented on GitHub (Feb 12, 2023):
That Pebble smart watch issue has exactly the same symptoms, it could be the same issue.
@advplyr commented on GitHub (Feb 12, 2023):
Most likely. The best way to address this will be to build from source and watch the logcat while pressing the controls. I'm not sure what events these watches are firing.
@advplyr commented on GitHub (Feb 26, 2023):
Can you test again with
0.9.62-beta?@andonevris commented on GitHub (Feb 26, 2023):
It's not working with 0.9.62 beta, same behaviour forward does nothing and back goes all the way back to the beginning of the book/podcast.
Regarding which events are firing the watch says prev track / next track on the label. The other diagnostic stuff is above my level I'm afraid.
@advplyr commented on GitHub (Feb 26, 2023):
Ah okay, we'll have to seek help for this one then.
@ISO-B commented on GitHub (Oct 30, 2024):
Did some testing for this and found that using Garmin native audio controller triggers following functions
https://github.com/advplyr/audiobookshelf-app/blob/e2fc5bcbb1316ef397cff9b933927ae529b119da/android/app/src/main/java/com/audiobookshelf/app/player/MediaSessionCallback.kt#L72-L78
If we swap those to use same functions as fast forward and rewind then Garmin watch is able to control playback.
https://github.com/advplyr/audiobookshelf-app/blob/e2fc5bcbb1316ef397cff9b933927ae529b119da/android/app/src/main/java/com/audiobookshelf/app/player/MediaSessionCallback.kt#L80-L86
After changing those it seems that everything else still work as before. It seems that controlling from Garmin watch won't trigger onCommand, onCustomAction nor onMediaButtonEvent so this is the only way how I managed solve this problem.
@doofmars commented on GitHub (Feb 25, 2026):
I'm a bit late to the party, but I basically encountered the same issue.
In short
I'll raise a PR for the suggested fix of @ISO-B and hopefully this will be accepted and merged into the next version.
I was contemplating if this should be configurable as suggested by @andonevris but I rather keep things simple and on par with other input methods, see the following investigation.
Feel free to object here @advplyr.
Investigation on root cause
I did some further digging and here are my observations:
First I considered three different methods on playback skipping. 1) Via the app, 2) Via bluetooth headset 3) Via remote control (in my case a Garmin Fenix smart watch).
Due to lack of hardware I was not able to test this in an android auto environment.
Second I noticed a difference when choosing audiobooks with A) multiple files and B) Single file with chapter marks.
In the following I focus on the case next track (
>|).1) Control via the app
Everything tested works as expected, next track (
>|) jumps to the next chapter and we have buttons to perform a time skip of 10 seconds (configurable).Here the control input next track (
>|) enters viaPlayerNotificationServiceand theseekPlayerfunction.Time to skip is provided by the UI, I'm unable to figure out how exactly.
2) Via bluetooth
With this method and my device I have the basic config options: play, pause, next and previous track.
Here the control input next track (
>|) enters via theMediaSessionCallbackand handled by theonMediaButtonEvent.A
KEYCODE_MEDIA_NEXTresults injumpForwarda time skip of 10 seconds (configurable).https://github.com/advplyr/audiobookshelf-app/blob/4fb9f6b92dbdb40ec6501f4e84782223806b4c46/android/app/src/main/java/com/audiobookshelf/app/player/MediaSessionCallback.kt#L230-L235
3) Via remote control
Here the control input next track (
>|) enters viaMediaSessionCallbackand handled by theonSkipToNext.The current implementation calls the
skipToNextfunction of thePlayerNotificationServiceand this thecurrentPlayer.seekToNext().Now comes the root cause of the issue described: What is 'next'?
In case A) where we have multiple files the next file is selected.
If the audiobook is chunked into files per chapter the skip works like in case 1) Control via the app
In case B) where we have a single audio file (with chapter marks) nothing happens.
The player internally tries to check
hasNextMediaItemfor the next thing but cannot find anything.https://github.com/advplyr/audiobookshelf-app/blob/4fb9f6b92dbdb40ec6501f4e84782223806b4c46/android/app/src/main/java/com/audiobookshelf/app/player/MediaSessionCallback.kt#L75-L77
I do not know which control device has buttons for
SkipToNextandFastForwardat the same time which would be affected by this change.But my observation that the behaviour with single files is still different would persists.
And another thing, on case B) with single file: pressing the control input previous track (
|<) jumps to the start of the file which is really annoying.Conclusion
Form a user view I want to cover the following case:
Thus changing the implementation for case 3) to work as it does in case 2) is sufficient.
Also other apps (AntennaPod) is using exactly the same behaviour.
If a user wants to skip a chapter there is always option 1) use the app with all 5 buttons :-)