安卓本地播放器的实现一
来源:互联网 发布:拉菲尔定律工资计算法 编辑:程序博客网 时间:2024/06/08 05:09
【安卓入门不久 新手一枚】最近在写一个播放器 照着天天动听的来 但远比不上 现在实现的功能也只是少部分 回过头来 想记录下这个过程中的收获
首先 在网上找了好几个demo 最终确定的是一个叫天籁之音的apk的源码(反编译的代码看不懂- -)下载地址是http://www.apkbus.com/android-102583-1-1.html
以此为基础开始了我的播放器开发之旅
现在回过去看 已经差不多被改的面目全非了哈 不过还是感谢其中的歌词显示部分省去了很大的力气 还有左右滑动切页面(目前还没明白原理)
首先 是把单独播放的界面加上 结果就是要在列表界面和播放界面实现播放的同步 使用了大量的广播去同步信息 也不知道是好还坏
第一个问题是获取歌曲时间长的问题 测试机器不同 在某台机器上无法获取 后来问了下 才知道meidaPlayer也可以获取到时长 但这样一来 就打乱了之前的构想 在此之前 是有一个MusicList的工具类 用来获取歌曲信息 关键代码如下:
public static List<Music> getMusicData(Context context) {List<Music> musicList = new ArrayList<Music>();ContentResolver cr = context.getContentResolver();if (cr != null) {// 获取所有歌曲Cursor cursor = cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);if (null == cursor) {return null;}if (cursor.moveToFirst()) {do {Music m = new Music();String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));if ("<unknown>".equals(singer)) {singer = "未知艺术家";}String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));long time = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//System.out.println("读到的歌曲时长"+time);String id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media._ID));String album=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));String album_id=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));String sbr = name.substring(name.length() - 3,name.length());//Log.e("--------------", sbr+"name:"+name);if (sbr.equals("mp3")) {m.setTitle(title);m.setArtist(singer);m.setDuration(Long.toString(time));m.setPath(url);m.setId(id);m.setAlbum(album);m.setAlbum_id(album_id);musicList.add(m);}} while (cursor.moveToNext());}}return musicList;}获取后的歌曲信息都封装成了一个Music的实体类 但由于时长获取不到 只好在service里的mediaPlayer获取后再发广播给activity去更新显示的时长(总感觉这个地方可以优化- -)于是不管是返回页面 还是去播放页面 这个时长的信息就要被广播来广播去的。。。
然后是进度条的问题 之前一直不动 以为又是机器问题 后来一个朋友点破 说是时长获取不到 进度条设置的max也是0 才明白过来 后来进度条的问题过了很久才解决 最后发现是xml文件的问题 照自己的理解 android:progressDrawable="@drawable/seek_background"的属性是指定进度条的背景和进度的样式的 android:thumb="@drawable/seekbar_thumb"是指定滑块的样式的 因为打算不要滑块 就把thumb设定为一张空白的图 结果发现进度条就不走了不懂为什么 感觉thumb好关键的说 最后seek_background采用的是
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape > <corners android:radius="10dip"/> <gradient android:startColor="#ffffffff" android:centerColor="#ff000000" android:endColor="#ff808a87" android:centerX="0.45" android:angle="270" /> </shape> </item> <item android:id="@android:id/progress"> <clip > <shape> <corners android:radius="10dip"/> <gradient android:startColor="#ffffffff" android:centerColor="#ffffff00" android:endColor="#ffaabd00" android:centerX="0.45" android:angle="270" /> </shape> </clip> </item>> </layer-list>发现好多问题不懂哈~欢迎指教
- 安卓本地播放器的实现一
- 安卓实现播放本地是视频
- 安卓视频播放器的实现(基于vitamio)
- 安卓实现视频播放器
- 安卓实现音乐播放器
- 安卓代码播放手机本地视频
- 安卓本地视频播放SurfaceView+MediaPlayer
- 安卓音乐播放器和视频播放器实现
- 安卓开发本地视频播放器——扫描本地视频文件显示在gridview上,然后点击播放。
- 安卓播放器
- 安卓反编译 | look一look小米音乐播放器
- 安卓音乐播放器app开发(一)---功能分析及启动页的制作
- Android实现本地音乐播放(一、实现音频的读取)
- 安卓 实现背景音乐的播放与关闭
- 安卓播放声音同时震动的效果实现
- 本地MediaPlayer音乐播放器与歌词同步的实现
- 安卓视频播放器 一行代码快速实现在线视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定
- 安卓视频播放器 一行代码快速实现视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定
- POJ 1274 匈牙利算法
- SQL中的INNER JOIN和JOIN有什么区别
- android 读取assets下的文件
- Oracle基本SQL语句
- 无限极分类php实现—查子孙树、家谱树
- 安卓本地播放器的实现一
- 如何: 保存到文件的邮件附件
- Console命令详解,让调试js代码变得更简单
- error while loading shared libraries: xxx.so.x"错误的原因和解决办法
- 服务器、post和get、表单提交案例
- eclipse下无法连接到github的解决办法
- 文笔又不好,学艺又不精,管他呢,随便开始吧。
- PowerShell 将对象转换成文本
- php C++ 扩展