exoplayer 纯java_一个使用ExoPlayer和RxJava2实现的Android音乐播放器

68747470733a2f2f6a69747061636b2e696f2f762f4f726669756d2f52784d75736963506c617965722d616e64726f69642e73766768747470733a2f2f696d672e736869656c64732e696f2f62616467652f416e64726f6964253230417273656e616c2d52784d75736963506c617965722d677265656e2e7376673f7374796c653d666c6174

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)

or

RxMusicPlayer.start(context, Intent(this, MainActivity::class.java))

if you want to specify the activity you want to launch from notification

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)

}

}

A notification is provided by default when the state gets changes. You can configure notification's icons by overriding them.

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 68747470733a2f2f6a69747061636b2e696f2f762f4f726669756d2f52784d75736963506c617965722d616e64726f69642e737667

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值