package jaygoo.audiomodedemo;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
/**
* ================================================
* 作 者:JayGoo
* 版 本:1.0
* 创建日期:16/10/28
* 描 述:本地音乐播放类
* 类 型:支持seekTo
* 修订历史:
* ================================================
*/
public class PlayLocalMusicController {
private static PlayLocalMusicController instance;
private AudioModeManger audioModeManger;
private MediaPlayer mediaPlayer ;
private int position;
private int mBufferProgress;
private int startTime;
private int endTime;
private PlayMusicCompleteListener mCompleteListener;
private PlayMusicErrorListener mErrorListener;
private PlayOnBufferingUpdateListener mPlayOnBufferingUpdateListener;
private PlayMusicPrepareCompleteListener mPlayMusicPrepareCompleteListener;
public interface PlayMusicCompleteListener {
void playMusicComplete();
}
public interface PlayMusicErrorListener {
void playMusicError();
}
public interface PlayMusicPrepareCompleteListener {
void playMusicPrepareComplete();
}
public interface PlayOnBufferingUpdateListener{
void PlayOnBufferingUpdate(int progress);
}
public void setCompleteListener(PlayMusicCompleteListener mListener){
if (mListener != null){
mCompleteListener = mListener;
}
}
public void setOnErrorListener(PlayMusicErrorListener listener){
if (listener != null){
mErrorListener = listener;
}
}
public void setOnPrepareCompleteListener(PlayMusicPrepareCompleteListener listener){
if (listener != null){
mPlayMusicPrepareCompleteListener = listener;
}
}
public void setPlayOnBufferingUpdateListener(PlayOnBufferingUpdateListener listener){
if (listener != null){
mPlayOnBufferingUpdateListener = listener;
if (mediaPlayer != null){
mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
mBufferProgress = percent;
mPlayOnBufferingUpdateListener.PlayOnBufferingUpdate(percent);
}
});
}
}
}
/**
* 获得单例
* @return
*/
public static PlayLocalMusicController getInstance() {
if (instance == null) {
instance = new PlayLocalMusicController();
}
return instance;
}
public PlayLocalMusicController() {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
}
/**
* 重新播放音频,not fix
*/
public void reStartPlay(){
if (mediaPlayer != null && mediaPlayer.isPlaying()){
mediaPlayer.seekTo(startTime);
mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
mp.start();
endTime = mp.getDuration();
if (mPlayMusicPrepareCompleteListener != null)
mPlayMusicPrepareCompleteListener.playMusicPrepareComplete();
}
});
}
}
private void registerAudioModeManger(){
if (audioModeManger == null) {
audioModeManger = new AudioModeManger();
}
audioModeManger.register();
}
public void playMusic(final String url , final PlayMusicCompleteListener listener, final PlayMusicErrorListener errListener) {
try {
if (mediaPlayer == null)mediaPlayer = new MediaPlayer();
this.mCompleteListener = listener;
this.mErrorListener = errListener;
mediaPlayer.reset();
mediaPlayer.setDataSource(url);
mediaPlayer.setLooping(false);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer player) {
if (mediaPlayer != null) {
mediaPlayer.start();
// registerAudioModeManger();
}
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer player) {
if (mCompleteListener != null)
mCompleteListener.playMusicComplete();
stopMediaPlayer();
}
});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer player, int what, int extra) {
stopMediaPlayer();
if (mErrorListener != null)
mErrorListener.playMusicError();
return false;
}
});
mediaPlayer.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
if (mErrorListener != null)
mErrorListener.playMusicError();
}
}
public void playMusicSeekTo(final String url , final int startTime) {
try {
if (mediaPlayer == null)mediaPlayer = new MediaPlayer();
this.startTime = startTime;
mediaPlayer.reset();
mediaPlayer.setDataSource(url);
mediaPlayer.setLooping(false);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer player) {
if (mediaPlayer != null) {
mediaPlayer.seekTo(startTime);
// registerAudioModeManger();
}
}
});
mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
mp.start();
endTime = mp.getDuration();
if (mPlayMusicPrepareCompleteListener != null)
mPlayMusicPrepareCompleteListener.playMusicPrepareComplete();
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer player) {
if (mCompleteListener != null)
mCompleteListener.playMusicComplete();
stopMediaPlayer();
}
});
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer player, int what, int extra) {
stopMediaPlayer();
if (mErrorListener != null)
mErrorListener.playMusicError();
return false;
}
});
mediaPlayer.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
if (mErrorListener != null)
mErrorListener.playMusicError();
}
}
public int getCurrentPlayTime() {
if (mediaPlayer != null) {
return mediaPlayer.getCurrentPosition();
}
return 0;
}
public int getTotalTime(){
if (mediaPlayer != null) {
return mediaPlayer.
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Android 听筒扬声器切换(多机型兼容、兼容5.0以上) 亲测有效机型(案例有限、仅供参考) 三星系:SM-A9000、SM-S5 魅族系:魅蓝E(yun os)、魅蓝note5 小米系:红米1s、小米note Vivo系:忘了什么型号了 详细介绍,参考博客:http://blog.csdn.net/google_acmer/article/details/54141229
资源推荐
资源详情
资源评论
收起资源包目录
AudioModeDemo.zip (93个子文件)
AudioModeDemo
AudioModeDemo.iml 867B
gradlew.bat 2KB
gradlew 5KB
gradle.properties 730B
.gradle
.DS_Store 6KB
2.14.1
tasks
_app_compileDebugJavaWithJavac
localJarClasspathSnapshot
localJarClasspathSnapshot.bin 20KB
localJarClasspathSnapshot.lock 17B
localClassSetAnalysis
localClassSetAnalysis.lock 17B
localClassSetAnalysis.bin 91KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
taskArtifacts
fileHashes.bin 154KB
cache.properties.lock 17B
taskArtifacts.bin 133KB
fileSnapshotsToTreeSnapshotsIndex.bin 29KB
fileSnapshots.bin 3.03MB
cache.properties 30B
app
proguard-rules.pro 661B
.DS_Store 6KB
src
test
.DS_Store 6KB
java
jaygoo
audiomodedemo
ExampleUnitTest.java 398B
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
androidTest
.DS_Store 6KB
java
jaygoo
audiomodedemo
ExampleInstrumentedTest.java 744B
.DS_Store 6KB
.DS_Store 6KB
main
res
raw
music.mp3 329KB
mipmap-xxxhdpi
ic_launcher.png 10KB
drawable
.DS_Store 8KB
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 208B
strings.xml 76B
styles.xml 383B
dimens.xml 211B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
activity_main.xml 2KB
values-w820dp
dimens.xml 358B
.DS_Store 6KB
java
jaygoo
audiomodedemo
PlayLocalMusicController.java 9KB
DLog.java 2KB
AudioModeManger.java 5KB
App.java 806B
MainActivity.java 4KB
.DS_Store 6KB
.DS_Store 6KB
AndroidManifest.xml 932B
app.iml 13KB
.gitignore 7B
build.gradle 868B
libs
.DS_Store 8KB
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 233B
.DS_Store 6KB
.idea
gradle.xml 626B
runConfigurations.xml 564B
misc.xml 2KB
copyright
profiles_settings.xml 74B
.DS_Store 6KB
modules.xml 363B
compiler.xml 686B
workspace.xml 166KB
libraries
javawriter_2_1_1.xml 322B
jsr305_2_0_1.xml 322B
support_media_compat_25_1_0.xml 631B
support_annotations_25_1_0.xml 519B
rules_0_5.xml 556B
javax_annotation_api_1_2.xml 350B
support_core_ui_25_1_0.xml 606B
runner_0_5.xml 561B
hamcrest_library_1_3.xml 334B
espresso_idling_resource_2_2_2.xml 688B
support_core_utils_25_1_0.xml 621B
appcompat_v7_25_1_0.xml 591B
hamcrest_core_1_3.xml 516B
junit_4_12.xml 467B
support_vector_drawable_25_1_0.xml 646B
animated_vector_drawable_25_1_0.xml 651B
support_compat_25_1_0.xml 601B
hamcrest_integration_1_3.xml 346B
espresso_core_2_2_2.xml 633B
support_fragment_25_1_0.xml 611B
support_v4_25_1_0.xml 411B
javax_inject_1.xml 501B
exposed_instrumentation_api_publish_0_5.xml 706B
.gitignore 118B
local.properties 432B
settings.gradle 15B
build.gradle 498B
共 93 条
- 1
资源评论
- zm17632018-11-17我来看看好不好用
- 天天泡2019-04-16因为外放没声下载的,由于硬件原因没体验出软件好坏
- 企鹅啊但是我2017-07-14听筒就直接没声了
- lnahapin2017-11-15学习的demo
- Swallow~2019-12-11感觉好像没有什么用处……
Google_acmer
- 粉丝: 67
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功