Skip to content
An android music player using ExoPlayer and RxJava2
Branch: master
Clone or download
Latest commit 1213bd6 Feb 25, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app
gradle/wrapper
rxmusicplayer
.gitignore
LICENSE
README.md
build.gradle
gradle.properties
gradlew
gradlew.bat Initial commit Feb 21, 2019
settings.gradle

README.md

Android Arsenal

RxMusicPlayer

An android music player using ExoPlayer and RxJava2.

Introduction

RxMusicPlayer is a part of our music player in Orfium new android application.
Using subjects and sealed classes, media manager can emit the latest state of exoplayer, allowing views and classes to observe it and react according to its state, without the need to have a reference to the media manager or exoplayer itself.

Initialization

Before start using RxMusicPlayer you have to call the method that starts the Media Service

RxMusicPlayer.start(context)

Usage

Create a Media item class that contains all the necessary data information and call playStop extension function on it.

Example:

val media = Media(
            id = 1, title = "Closer and Closer . . . 25.11.2018", artist = "Strobi-wan", duration = 7861, 
            image = "https://s3-us-west-2.amazonaws.com/orfium-public/tracks/artwork/45c4ad6b21dc4aecad4bee0bafefb613.jpg",
            streamUrl = "https://s3-us-west-2.amazonaws.com/orfium-public/tracks/8c7465df1f0c4e48af10ad4f6c17a2ef.mp3"
        )
media.playStop()

You can also check if a Media item is currently playing

if (media.isPlaying())

or add/remove it from queue

media.addQueue()

media.removeQueue()

If you wish not to use the extension functions you can use RxMusicPlayer action to emit a new action that the MediaManager will handle. Here is the full list of actions that the MediaManager can handle

Example:

RxMusicPlayer.action.onNext(Action.pause())

or

RxMusicPlayer.action.onNext(Action.seek(position))

To observe the changes on media player state just subscribe to RxMusicPlayer state, that will emit the current PlaybackState along with the current Media item on Queue. When a new observer subscribes to RxMusicPlayer state, it immediately gets notified about the current PlaybackState. You can find all states here

RxMusicPlayer.state
            .distinctUntilChanged()
            .subscribe { state ->
                when (state) {
                    is PlaybackState.Buffering -> /* Your code */
                    is PlaybackState.Playing -> showPlaying(state.media)
                }
            }

RxMusicPlayer allows you to observe changes in media queue list and the current playback position of exoplayer

RxMusicPlayer.queue
                .subscribe { queueData -> /* Your code */ }

RxMusicPlayer.position
                .observeOn(AndroidSchedulers.mainThread())
                .distinctUntilChanged()
                .subscribe { position -> /* Your code */ }

Setup

The latest library version is

Add the JitPack repository in your build.gradle (top level module):

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

And add the dependency in the build.gradle of the module:

implementation 'com.github.Orfium:RxMusicPlayer-android:LATEST_VERSION'

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

You can’t perform that action at this time.