Created
June 30, 2017 21:56
-
-
Save Marchuck/743785962b98db1522ed4ab338d664c0 to your computer and use it in GitHub Desktop.
example of rxPlayer implementation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package xD; | |
import android.content.Context; | |
import android.content.res.AssetFileDescriptor; | |
import android.media.MediaPlayer; | |
import android.util.Log; | |
import hugo.weaving.DebugLog; | |
import io.reactivex.Observable; | |
import io.reactivex.ObservableEmitter; | |
import io.reactivex.ObservableOnSubscribe; | |
import io.reactivex.disposables.Disposable; | |
import io.reactivex.functions.Cancellable; | |
/** | |
* Project *** | |
* <p> | |
* Created by Lukasz Marczak | |
* on 30.06.2017. | |
*/ | |
public class RxPlayerMinimalistic { | |
public static final String TAG = RxPlayerMinimalistic.class.getSimpleName(); | |
private Context context; | |
public RxPlayerMinimalistic(Context context) { | |
this.context = context; | |
} | |
public Observable<Boolean> play(final String path) { | |
return Observable.create(new MediaPlayerObservableOnSubscribe(context, path)); | |
} | |
public static class MediaPlayerObservableOnSubscribe | |
implements ObservableOnSubscribe<Boolean>, Cancellable { | |
public static final String TAG = MediaPlayerObservableOnSubscribe.class.getSimpleName(); | |
MediaPlayer mediaPlayer; | |
final String assetPath; | |
final Context context; | |
public MediaPlayerObservableOnSubscribe(Context context, String assetPath) { | |
this.assetPath = assetPath; | |
this.context = context; | |
} | |
@Override public void subscribe(final ObservableEmitter<Boolean> emitter) throws Exception { | |
emitter.setCancellable(this); | |
mediaPlayer = new MediaPlayer(); | |
mediaPlayer.reset(); | |
AssetFileDescriptor afd = context.getAssets().openFd(assetPath); | |
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); | |
afd.close(); | |
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { | |
@Override public void onPrepared(MediaPlayer mp) { | |
mp.start(); | |
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { | |
@Override public void onCompletion(MediaPlayer mp) { | |
stopPlay(mp); | |
emitter.onNext(true); | |
emitter.onComplete(); | |
} | |
}); | |
} | |
}); | |
mediaPlayer.prepareAsync(); | |
} | |
@Override public void cancel() throws Exception { | |
stopPlay(mediaPlayer); | |
} | |
public boolean stopPlay(MediaPlayer mediaPlayer) { | |
if (mediaPlayer == null) { | |
return false; | |
} | |
mediaPlayer.setOnPreparedListener(null); | |
mediaPlayer.setOnCompletionListener(null); | |
try { | |
mediaPlayer.stop(); | |
} catch (IllegalStateException ignored) { | |
} | |
try { | |
mediaPlayer.reset(); | |
} catch (IllegalStateException ignored) { | |
} | |
try { | |
mediaPlayer.release(); | |
} catch (IllegalStateException ignored) { | |
} | |
return true; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment