最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android开发在线音频播放器-第一章:AudioPlayerManager详解
时间:2026-05-27 13:30:02 编辑:袖梨 来源:一聚教程网
掌握ExoPlayer核心功能,实现高效音频播放管理。本文将详细介绍AudioPlayerManager工具类的完整实现过程,助您快速构建稳定播放功能。
ExoPlayer作为谷歌官方推荐的多媒体框架,支持变速播放等高级特性。通过添加以下依赖即可快速集成:
implementation 'com.google.android.exoplayer:exoplayer:2.17.1' //exo播放器
AudioPlayerManager封装了音频焦点管理、播放控制等核心功能,包含以下特性:
/**
* 音频播放
*/
public class AudioPlayerManager {
private static final String TAG = "AudioPlayerManager";
private static AudioPlayerManager instance;
private Context context;
private SimpleExoPlayer mediaPlayer;
private DataSource.Factory dataSourceFactory;
private AudioManager manager; private AudioPlayerManager(Context context) {
this.context = context;
createPlayer();
requestAudioFocus();
} public static AudioPlayerManager getInstance(Context context) {
synchronized (AudioPlayerManager.class) {
if (instance == null) {
instance = new AudioPlayerManager(context);
}
} return instance;
} public void requestAudioFocus() {
manager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
// manager.requestAudioFocus(afChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
} public ExoPlayer getMediaPlayer() {
return mediaPlayer;
} public void setAudioFile2(String filepath) {
try {
//这是一个代表将要被播放的媒体的MediaSource
MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(filepath));
mediaPlayer.prepare(mediaSource);
mediaPlayer.setPlayWhenReady(false);
} catch (Exception e) {
e.printStackTrace();
}
} AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange){
case AudioManager.AUDIOFOCUS_LOSS:
//长时间丢失焦点,当其他应用申请的焦点为AUDIOFOCUS_GAIN时,
//会触发此回调事件,例如播放QQ音乐,网易云音乐等
//通常需要暂停音乐播放,若没有暂停播放就会出现和其他音乐同时输出声音
//释放焦点,该方法可根据需要来决定是否调用
//若焦点释放掉之后,将不会再自动获得
manager.abandonAudioFocus(afChangeListener);
PlayControlTools.setACTION_PAUSE(); //控制播放暂停
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
//短暂性丢失焦点,当其他应用申请AUDIOFOCUS_GAIN_TRANSIENT或AUDIOFOCUS_
相关文章
- 《奥奇传说》手游:昼夜女神诺雅技能效果解析 05-27
- 地平线6自动驾驶设置方法-如何开启自动驾驶 05-27
- Pandas多源数据整合-三大数据合并方法Merge Join与Concat全面解析 05-27
- Debian Strings自定义配置方法详解 05-27
- MySQL高频面试八股题解析:日志-SQL优化-锁机制-事务-MVCC 05-27
- parsec手机连接电脑教程 05-27