AudioBookPlayer is an Android app focused on long-form listening, especially audiobooks and spoken-word files stored in local folders. The app lets you choose a base folder through the system picker, scans it recursively, and presents your library as an expandable tree in the left drawer. You can browse folders, pick a track, and the player keeps track of your last selected file and playback position so it can resume later.
- Local folder library using Android system picker with recursive scanning.
- Resume-aware playback with saved track and position.
- Large cover art UI with blurred artwork background.
- Playback controls: play/pause, stop, previous/next, skip, scrub, and time jump.
- Bookmark system with per-book timestamps, clip capture, and grouped bookmark tree.
- Media session + foreground playback service for lock screen, Bluetooth, and car controls.
- Fixed playback stopping during orientation changes by keeping the playback service alive across activity recreation.
- Improved restore flow to sync the full-app UI with active service playback without re-preparing the track.
- Fixed bookmark database lifecycle cleanup to avoid leaked SQLite connection warnings.
releases/AudioBookPlayer-v1.0.9-debug-sideload.apk
The main screen is designed around large cover art. When embedded artwork is available, the app shows it on the cover and uses a blurred version in the background for context. When no artwork is available, the visual state stays clean and black. Playback controls include previous and next track, play and pause, stop, configurable skip intervals, direct timeline scrubbing, and a time-jump dialog for entering a target time in mm:ss or hh:mm:ss format.
Bookmarks are a core feature. A bookmark button appears on the cover area and can store the current book name with the exact timestamp. A long press on that button opens clip-length choices so a short audio segment can also be captured. Bookmarks are stored in a local Room database, while optional clip audio and cover snapshots are saved as files in app storage and referenced from the database. The right drawer contains a grouped bookmark tree where each book expands to its saved timestamps. Selecting a bookmark attempts to open the original track at the saved position, while a dedicated play/stop toggle on bookmark rows can play the saved clip directly without changing the main player state.
Playback is integrated with Android media APIs through a media browser service and media session. This allows hardware media buttons, Bluetooth head units, and lock screen controls to interact with the app more reliably. The service runs as a foreground media playback service when active, exposes transport controls in a notification, and publishes metadata including title, duration, and embedded artwork so lock screen and external media surfaces can show rich information.
The project uses Kotlin, ViewBinding, RecyclerView-based tree lists, and Room for bookmark persistence. It is intended for local-file playback rather than streaming and is optimized for fast navigation, resume behavior, and audiobook-oriented bookmarking.
