Android实现媒体播放_01最简单的仅记录下流程
以下记录用 Service + MediaPlayer 实现网络音频文件的播放
1. Service 的实现
public class MusicPlayerService extends Serviceimplements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnBufferingUpdateListener,MediaPlayer.OnErrorListener, MediaPlayer.OnInfoListener {private String TAG = "Music-->log--> MusicPlayerService";//当前正在工作的播放器对象private MediaPlayer mMediaPlayer;@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.d(TAG, "onStartCommand: intent " + intent + " flags " + flags + " startId " + startId);return super.onStartCommand(intent, flags, startId);}@Overridepublic IBinder onBind(Intent intent) {Log.d(TAG, "onBind: intent " + intent);//设置代理,所有播放相关的操作通过代理暴露给AvtivityMusicPlayerBinder musicPlayerBinder = new MusicPlayerBinder(MusicPlayerService.this);prepareMusic();return musicPlayerBinder;}/*** 准备MediaPlayer环境*/private void prepareMusic() {try {mMediaPlayer = new MediaPlayer();mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置音频流的类型。mMediaPlayer.setOnPreparedListener(this); // 准备好mMediaPlayer.setOnCompletionListener(this); //播放完成事件监听器mMediaPlayer.setOnBufferingUpdateListener(this); //缓冲变化mMediaPlayer.setOnErrorListener(this); //出错mMediaPlayer.setOnInfoListener(this); //音频信息mMediaPlayer.setWakeMode(MusicPlayerService.this, PowerManager.PARTIAL_WAKE_LOCK); //为MediaPlayer设置低级电源管理行为Class<MediaPlayer> clazz = MediaPlayer.class;Method method = clazz.getDeclaredMethod("setDataSource", String.class, Map.class);String path = "http://mp3.9ku.com/hot/2007/11-01/91161.mp3"; //音乐文件Log.e(TAG, "playMusic: startPlay-->: ID: ,PATH:" + path);method.invoke(mMediaPlayer, path, null);mMediaPlayer.prepareAsync();} catch (Exception e) {e.printStackTrace();}}/*** 暴露给代理Binder的 开始播放 的方法*/public void startMusic() {Log.d(TAG, "startMusic: ");mMediaPlayer.start();}/*** 暴露给代理Binder的 停止播放*/public void stopMusic() {mMediaPlayer.stop();}/*** 暴露给代理Binder的 暂停播放*/public void pause() {Log.d(TAG, "pause: ");mMediaPlayer.pause();}/*** MediaPlayer 初始化完成** @param mediaPlayer*/@Overridepublic void onPrepared(MediaPlayer mediaPlayer) {Log.d(TAG, "onPrepared: MediaPlayer 初始化完成 ");}/*** 缓冲百分比*/@Overridepublic void onBufferingUpdate(MediaPlayer mp, int percent) {Log.d(TAG, "onBufferingUpdate: mp " + mp + " percent " + percent);}/*** 播放完成调用*/@Overridepublic void onCompletion(MediaPlayer mp) {Log.d(TAG, "onCompletion: mp " + mp);}/*** 播放失败*/@Overridepublic boolean onError(MediaPlayer mp, int event, int extra) {Log.d(TAG, "onError: mp " + mp + " extra " + extra + " event " + event);return false;}/*** 获取音频信息*/@Overridepublic boolean onInfo(MediaPlayer mp, int event, int extra) {Log.d(TAG, "onInfo: mp " + mp + " event " + event + " extra " + extra);return false;}/*** 与Activity解除绑定,即Activity销毁时回调的生命周期方法*/@Overridepublic boolean onUnbind(Intent intent) {Log.d(TAG, "onUnbind: intent " + intent);return super.onUnbind(intent);}@Overridepublic void onDestroy() {Log.d(TAG, "onDestroy: ");super.onDestroy();}
}
2.代理类,将所有播放相关的暴露给Activity
public class MusicPlayerBinder extends Binder {private final MusicPlayerService mService;public MusicPlayerBinder(MusicPlayerService musicPlayerService) {this.mService = musicPlayerService;}public void startMusic() {mService.startMusic();}public void stopMusic() {mService.stopMusic();}public void pause() {mService.pause();}
}
3.Activity 绑定Service,操作音频文件
public class MusicPlayerActivity extends AppCompatActivity implements View.OnClickListener {private String TAG = "Music-->log--> MusicPlayerActivity";private MusicPlayerBinder mBinder;private MusicPlayerServiceConnection mConnection;@Overrideprotected void onDestroy() {super.onDestroy();Log.d(TAG, "onDestroy: ");unbindService(mConnection);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_music_player);initViews();openService();}private void initViews() {Button btnStart = findViewById(R.id.music_btn_start);Button btnPause = findViewById(R.id.music_btn_pause);btnStart.setOnClickListener(this);btnPause.setOnClickListener(this);}/*** 采用两种方式与Service建立连接* startService :使Service长期在后台存在,不受Activity生命周期的影响* bindService :使Activity能拿到Service的代理对象,能对Service进行操作*/private void openService() {Intent intent = new Intent(this, MusicPlayerService.class);startService(intent);mConnection = new MusicPlayerServiceConnection();bindService(intent, mConnection, Context.BIND_AUTO_CREATE);}@Overridepublic void onClick(View v) {int i = v.getId();if (i == R.id.music_btn_start) {mBinder.startMusic(); //播放音乐} else if (i == R.id.music_btn_pause) {mBinder.pause(); // //暂停播放}}/*** Service绑定成功后的监听* MusicPlayer Service Connection*/private class MusicPlayerServiceConnection implements ServiceConnection {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {Log.d(TAG, "onServiceConnected: ");if (null != service) {if (service instanceof MusicPlayerBinder) {mBinder = (MusicPlayerBinder) service;Log.d(TAG, "onServiceConnected: mBinder " + mBinder);}}}@Overridepublic void onServiceDisconnected(ComponentName name) {}}
}
4.注意
1.权限
<uses-permission android:name="android.permission.INTERNET" /> <!-- 系统锁的机制, 只要有人拿着这个锁,系统就无法进入休 Service播放音乐,需要此权限--> <uses-permission android:name="android.permission.WAKE_LOCK" />2.Android9.0手机不做htts校验
参考
Android开发之MediaPlayer详解
有关Service的startService与bindService在各种情形下生命周期的变化
Android实现媒体播放_01最简单的仅记录下流程相关推荐
- mp4 android自动播放,Android 使用VideoView播放MP4的简单实现
使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...
- android 播放静态mp4,Android 使用VideoView播放MP4的简单实现
使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...
- Android的媒体播放器------简易音乐播放器(详解)
一.案例效果 二.欢迎界面的设计与功能 2.1 .案例效果 设计一个倒计时自动跳转的页面 2.2. 布局界面 activity_welcome.xml 参考代码: <?xml version=& ...
- Android的媒体播放器——简易视频播放器(详解)
一.案例效果 二.主界面的设计与功能 2.1 案例效果 2.2 布局界面 activity_main.xml 参考代码: <?xml version="1.0" encodi ...
- libvlc获取一帧_android - 从android vlc媒体播放器获取当前帧 - 堆栈内存溢出
我找到了一个非常简单,非常快速的解决方案. 只需使用TextureView而不是SurfaceView ,然后在使用getBitmap()函数播放时随时检索图像,如下所示. public class ...
- 30个最佳和免费的Android媒体播放器
今天发布的内容有所不同,我们为您介绍了Google Play App Store提供的The Best Android Media Player . 1. MusiXmatch歌词播放器 狂热的音乐爱 ...
- 基于android的音乐播放器毕业设计,基于android音乐播放器的毕业设计ppt
<基于android音乐播放器的毕业设计ppt>由会员分享,可在线阅读,更多相关<基于android音乐播放器的毕业设计ppt(29页珍藏版)>请在人人文库网上搜索. 1.1. ...
- 便携式媒体播放器:电路、工作、布线及其应用
媒体播放器设备播放音频文件和数字视频.目前,有多种便携式媒体播放器可以简单地播放不同的数字音频.视频和图像文件.先进的媒体播放器支持游戏:录制视频并提供额外的存储空间.所以通常这个空间是存储卡槽的形式 ...
- Android语音消息播放(MediaPlayer) 踩坑
引言 最近项目中的IM模块收到反映,语音消息点了之后正在播放却没有声音,有时甚至直接ANR异常,因项目中的IM采用的是网易的云信,所以第一时间请教了云信的技术人员,得到的回复是他们的SDK播放语音是直 ...
最新文章
- LeetCode Minimum Genetic Mutation(dfs,bfs)
- css 盒子有内容 盒子往下掉_css盒子模型与文本溢出学习笔记
- nginx + mysql + php-fpm 环境
- MVC系列-6.注册页面
- python 三元运算符求abc_python三元运算符实现方法
- Ubuntu 下常用的命令 简略记录
- ubuntu19.10安装haroopad软件
- mybatis+spring+c3p0+maven+ehcache
- php无法连通mysql_怎么解决php无法连接mysql的问题
- [BZOJ5329][Sdoi2018]战略游戏 圆方树+虚树
- Windows7 USB/DVD Download Tool – U盘安装Win7工具
- 【定位】TOF与TDOA
- 100款经典黑客小工具使用说明
- 360浏览器html在哪儿,360浏览器的收藏夹在哪_如何找到360浏览器收藏夹路径位置...
- grads插值_GrADS中填色标尺cbarn用法
- adventureworks mysql_adventureworks
- matlab幻方变换_Matlab入门1-幻方矩阵
- 希腊字母与英文读音中文读音对照表
- [整站源码]thinkphp古筝古琴书画培训类网站模板+前后端源码
- 将家人从Gmail,Thunderbird,Outlook等迁移到Google Apps:权威指南