【达内课程】音乐播放器4.0(播放详情页下)
歌词显示
1、从服务器通过 url 把歌词下载到本地。通过输入流按行读取,每读一行,把这一行的歌词封装到 HashMap<String,String> 中
2、每当更新音乐进度时(1s/次),需要判断当前时间是否需要更新歌词
根据 song_id 获取歌曲信息的接口中 lyric字段是 lrc 歌词,根据链接下载 lrc 歌词。我们用到的接口是:
https://music.163.com/api/song/media?id=167876
因此 UrlFactory 中增加查询歌词的方法
public static String getMusicLyric(String id) {String url = "https://music.163.com/api/song/media?id=" + id;return url;
}
返回的 json 数据格式为
MusicModel 中增加下载歌词的方法
public void downloadLrc(final String lrclink, final LrcCallback callback) {AsyncTask<String,String, HashMap<String,String>> task = new AsyncTask<String, String, HashMap<String, String>>() {@Overrideprotected HashMap<String, String> doInBackground(String... strings) {try {InputStream is = HttpUtils.getInputStream(lrclink);String json = HttpUtils.isToString(is);Log.d("info", json);JSONObject object = new JSONObject(json);String lyric = object.getString("lyric");Log.d("TTT",lyric);InputStream inputStream = new ByteArrayInputStream(lyric.getBytes());BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String line = "";HashMap<String,String> lrc = new HashMap<>();while ((line = reader.readLine())!=null){//读到了歌词的一行if(line.length()<10){//一行中的数据不够解析continue;}//line:[00:07.000]音乐推广营销:奔跑怪物//由于是显示每秒的歌词,所以截取00:07String key = line.substring(1,6);String value;if(line.length() == 11){//说明只有时间value = "";}else {value = line.substring(11);}lrc.put(key,value);}return lrc;} catch (IOException | JSONException e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(HashMap<String, String> hashMap) {//返回上面的lrccallback.onLrcLoaded(hashMap);}};task.execute();}
增加一个 LrcCallback
/*** 歌词相关的回调*/
public interface LrcCallback {/*** 当歌词解析完毕执行** @param lrc*/void onLrcLoaded(HashMap<String, String> lrc);
}
在 MusicItem 这个 model 中增加
public HashMap<String,String> lrc;
Activity 中
public class TestActivity extends AppCompatActivity implements View.OnClickListener {......private TextView img_play_music_lrc;......private void setViews() {......img_play_music_lrc = findViewById(R.id.img_play_music_lrc);}....../*** 接收音乐信息的广播接收器*/class MusicInfoBroadCastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(Globalconsts.ACTION_UPDATE_MUSIC_PROGRESS)) {......MusicApplication app = MusicApplication.getApp();MusicItem music = app.getCurrentMusic();HashMap<String,String> lrc = music.lrc;if(lrc!=null){//根据当前时间,获取歌词内容,更新textviewString lrcContent = lrc.get(currentStr);if(lrcContent!=null){img_play_music_lrc.setText(lrcContent);}}} else if (action.equals(Globalconsts.ACTION_MUSIC_STARTED)) {......//加载歌词musicModel.downloadLrc(UrlFactory.getMusicLyric(music.id), new LrcCallback() {@Overridepublic void onLrcLoaded(HashMap<String, String> lrc) {//将下载好的歌词存入music对象music.lrc = lrc;Log.d("TTT",lrc.toString());//把相对应的歌词呈现在界面上//每隔1s更新歌词内容//在更新音乐进度的广播接收器中更新即可}});}}}......
}
运行效果图
【达内课程】音乐播放器4.0(播放详情页下)相关推荐
- 迷你音乐播放器v1.0正式上线!
迷你音乐播放器V1.0正式上线! 版本介绍: 1.随机播放切换开关(通过点击专辑图片) 2.通过拖动歌曲名及艺术家名调整歌曲播放进度 3.手机浏览访问支持熄屏播放 4.暂不支持在线搜索功能 快来一起分 ...
- Flash版(迷你音乐播放器mp3Player1.0 Beta1 )附源码
迷你音乐播放器mp3Player1.0 Beta1 ================= //What's new: 主要功能特色: 1.支持歌曲名称,歌手名称以及专辑等关键字搜索. 2.支持随机搜索 ...
- (1)H5实现音乐播放器【正在播放-歌词篇】
近期闲来无事,就想着复习一下前端的东西,然后正好跟朋友搞了一个公共开放的音乐api接口,就想着写一个音乐播放器玩玩! 话不多说,直接上图,然后上代码 [播放器显示正在播放] 实现功能: 1:歌词随着歌 ...
- HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌)
用HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌) 效果如下:(鼠标点击按钮可以实现播放或暂停,按钮会旋转,实现了歌词同步,功能还需改进) 代码如下: <!DOCTYPE htm ...
- 秀杰音乐盒之mtv播放器 v1.0 怎么用
Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...
- 安捷影音播放器 v16.0.3 官方版
安捷影音播放器 v16.0.3 官方版 软件大小:4.78MB 软件语言:简体中文 软件类别:影音播放 软件授权:官方版 更新时间:2014-07-09 应用平台:/Win8/Win7/WinXP 安 ...
- Android音乐播放器开发(5)—播放界面(播放、暂停、上一首、下一首,顺序播放、随机播放、拖拽进度条…)
1. 说明 源码已同步到Gitee仓库,Github仓库,觉得还不错的话帮忙点个"star"吧,非常感谢. Android播放器专栏其它文章: 服务端:Android音乐播放器开发 ...
- android 小型音乐播放器(实现播放、下一首、上一首、自动播放、随机播放按钮、当前播放歌曲界面)
该文章主要针对 android 的音乐播放器软件进行简单的功能添加:播放.断点播放.停止.上一曲.下一曲.随机播放.显示当前播放歌曲(后续会为当前显示的播放添加动画): 软件开发流程: 1.先向内存卡 ...
- 5kplayer(高清视频播放器) V6.0
点击下载来源:5kplayer(高清视频播放器) V6.0 5kplayer是针对windows开发的一款优秀.全新的高清视频播放器软件,支持各类视频音频,DVD,电台等播放.这款高清视频播放器软件可 ...
- 关于音乐播放器中随机播放的两种模式
众所周知,一个有完整功能的音乐播放器应该能够让用户自主选择播放模式,例如单曲循环,随机播放,列表循环,全部播放......本文主要讨论其中的随机播放,在实现随机播放的功能可以有两种方法,即random ...
最新文章
- 我身边那些逃离深圳的朋友们
- 苹果企业证书_今日更新:丨企业证书已更新丨苹果丨安卓软件下载说明丨
- c#将字符串转换为数组_pandas入门: 时间字符串转换为年月日
- Silverlight for Windows Phone 7开发体验
- in use 大学英语4word_2015年7月中国医科大学《大学英语4》在线作业答案
- spark partition
- Spring Boot笔记-WebSocket的使用
- Fellow观点:AI框架下的医疗影像教学
- Linux 系统之Sysvinit
- JAVA中super和this关键字的区别
- 【iOS 15】iPhone如何录屏?iPhone屏幕录制技巧分享
- Java web 使用页面压缩
- Eclipse中开发测试脚本
- 全方位了解8.0系统下的Handler
- 多线程实现飞花令-多诗库版
- 在火狐浏览器打开xpath_元素定位工具:火狐浏览器Try Xpath插件
- 新手做搭建独立站需要准备什么
- 寒冬,送点社区温暖。
- PS 图像调整算法——饱和度调整
- 1.2 SpringBoot构建Docker镜像并推送到Harbor
热门文章
- 【CDH】选定的 Parcel 正在下载并安装在群集的所有主机上 主机运行状况不良
- 30个打发时间的可爱网站~(太喜欢了…
- 1501051659-hpu-1031 【C语言训练】求素数问题.cpp
- SpringBoot实现定时发送邮件功能
- sitecore-多变量测试与A / B测试概念论述
- 2012年终总结----spring mvc
- 数据库服务器资源使用周报
- 自然语言处理(1)深度学习基础及其通用模板
- Systick滴答定时器解析
- 留学语言班考核成绩C,想出国留学,派笛教育告诉你GPA成绩和语言考试成绩都不能落下...