闲来无事打算开始记录下学习状态,写点文章,一方面总结这一个星期所得,另一方面可以通过我的分享去帮助更多的朋友。
废话不多说,下面我来简单介绍下此项目实现的简单功能
Android网络音乐/视频播放器
可以获取网络连接音乐/视频并播放,也可以播放本地音乐/视频
获取某路径下的所有音频路径
本项目是用Android MediaPlayer实现音乐/视频播放
MediaPlayer包含了Audio和Video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlaer来实现的
第一步(获取权限)
READ_EXTERNAL_STORAGE(获取外部存储权限),INTERNET(网络连接权限)

第二部(设置布局)
一个EditText用来接收链接,6个Button分别用来监听 播放(play)、暂停(pause)、停止(stop)、重播(replay)、扫描(sm)、视频(mv)


第三步(实现音乐播放)
自定义一个方法Musicplay获取音乐路径然后用MediaPlayer对象实现音乐的播放(此方法的每一步都已经打上注释)

第4步(写监听事件方法)
东西有点多,我介绍下重点,详细内容可以在我Github中观看
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){}// 除了Play可以不用判断,其他监听方法必须要判断音乐是否存在和播放情况
mediaPlayer.start();//音乐启动
mediaPlayer.pause();//音乐暂停
mediaPlayer.stop();//音乐停止
mediaPlayer.seekTo(0);//从音频最开始的地方播放,也可以用它来调整播放进度
第四步(获取本地音频)
这个获取是个伪获取,它不会自动搜索手机中的音乐,需要手动指定文件夹。
把音频路径获取放入Map集合,然后存入List中

第五步(用ListView显示出获取到的音频名)
首先你需要定义好一个用来显示每一个列内容的xml,我就用一个TextView显示音频信息
再写适配器我用的是简单适配器SimpleAdapter,因为不想自己写适配器(适配器 用来把数据映射到ListView上的中介)
SpinnerAdapter可以作为AbsSpinner的数据源,AbsSpinner的子类有Gallery, Spinner和AppCompatSpinner,所以它扩展性很强

/*SimpleAdapter的参数说明
* 第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要
* 第二个参数表示生成一个Map(String ,Object)列表选项
* 第三个参数表示界面布局的id 表示该文件作为列表项的组件
* 第四个参数表示该Map对象的哪些key对应value来生成列表项
* 第五个参数表示来填充的组件 Map对象key对应的资源一依次填充组件 顺序有对应关系 */
第六步(写ListView触发事件)
当用户点击了某条音频Item触发事件 解析此位置的音频信息获取路径,调用MusicPlay播放,直接看注释,非常详细了

看下效果还行功能都实现了,界面美化不想写


第七步(开始写视频播放器)
视频播放器依然MediaPlayer实现,不过我用了别的框架JiaoZiVideoPlayer
它的特点是视频全屏播放和浮层小窗播放,可以完全自定义UI,能在ListView、ViewPager和ListView、ViewPager和Fragment等多重嵌套模式下全屏工作,手势修改进度和音量,视频大小的屏幕适配,宽或长至少有两个对边是充满屏幕的,另外两个方向居中,可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏,重力感应自动全屏,WebView嵌套本地视频控件
想要实现播放效果也很容易
导包jiaozivideoplayer和squareup (在安卓项目build path文件内找到dependencies 添加下文内容)
compile'com.squareup.picasso:picasso:2.5.1'
debugCompile'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
releaseCompile'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
testCompile'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
compile'cn.jzvd:jiaozivideoplayer:6.0.2'
1.写一个布局

2.写一个播放函数

3.映射并调用播放方法

4.Activity在Manifest中的设置
android:configChanges 保证了在全屏的时候横竖屏切换不会执行Activity的相关生命周期,打断视频的播放,控制全屏后和退出全屏的屏幕方向

5.重写onBackPressed和onPause方法

通过查看发现 它只有一个MediaPlayer的实例,所以它不能同时播放多个视频,好处就是节省资源
那些其他查找本地视频,界面美化,用户体验我就不打算写了
效果


这样就完成了个简单的播放器,希望我的文章能帮助到大家
代码地址:Github
有兴趣研究JiaoZiVideoPlayer也可以点击访问
本文章为原创,未经同意不得转载。
网友评论