`
ishelf
  • 浏览: 106497 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android播放器(music player)源码分析3(页面解析,ArrayListCursor)

阅读更多

一。首先介绍ArrayListCursor的使用,该类的可以将ArrayList包装为cursor,从而实现的游标适配器。这里重载了ArrayListCursor,生成一个可以包装自定义数据结构的游标。

   public ArrayListCursor(String[] columnNames, ArrayList<ArrayList<Object>> rows,String catagoryColumnNames ,Object catagory) {
        int colCount = columnNames.length;
        boolean foundID = false;
        // Add an _id column if not in columnNames
        for (int i = 0; i < colCount; ++i) {
            if (columnNames[i].compareToIgnoreCase("_id") == 0) {
                mColumnNames = columnNames;
                foundID = true;
                break;
            }
        }

        if (!foundID) {
            mColumnNames = new String[colCount + 1];
            System.arraycopy(columnNames, 0, mColumnNames, 0, columnNames.length);
            mColumnNames[colCount] = "_id";
        }

        int rowCount = rows.size();
        mRows = new ArrayList<ArrayList<Object>>();

        int index = -1;
        for(int i = 0 ; i < columnNames.length ; i ++){
        	if(columnNames[i] ==catagoryColumnNames)
        		index = i;
        }
        if(index ==-1)
			try {
				throw new Exception("invade column name");
			} catch (Exception e) {
				e.printStackTrace();
			}
        for (int i = 0; i < rowCount; ++i) {
        	if(!rows.get(i).get(index).equals(catagory))
        		continue;
            mRows.add(rows.get(i));
            if (!foundID) {
                mRows.get(i).add(i);
            }
        }
    }

     这里可以加入相应列的列名和其属性值,本来想直接对cursor进行内部属性的过滤,可是google了半天没搞懂怎么直接对包装生成的cursor进行操作。虽然FilterQueryProvider可以实现属性过滤,貌似该类是基于sql语句的从而其层次要低于cursor所在的层次。⊙﹏⊙b汗,搞了好久还是以悲剧结束。

      于是在没有别的办法,就自己重载了AbstractCursor类,在构造函数里面实现对属性的过滤。

二。页面解析。在原有的播放器源码上实现在线播放,第一步就是要解析得到所需的资源。首先对这源码表示崇拜一下,没想到内部源码写的真的很完美(就我个人而言),想实现在线播放比较容易,只需要将自己的一些逻辑加进去,该源码已经提供了完整的在线播放的功能。这里首先介绍下百度音乐的解析

	public static ArrayList<ArrayList<Object>>  parsertoArray() {
		URL url;
		try {
			url = new URL("http://list.mp3.baidu.com/index.html");
			String rex1 = "<div class=\"li\">(.*?<span>(.*?)</span>.*?)</div>";
			String rex2 = ".*?<a.*?href=\"(.*?)\".*?>(.*?)</a>.*?";
			ArrayList<ArrayList<Object>> result = Rex.match(url, rex1, rex2);
			return result;
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}

 以上代码将歌手,音乐类别和歌曲抽取出来

	class CatagoryCursorAdapter extends SimpleCursorAdapter{

		private int mCatagoryID;
		public CatagoryCursorAdapter(Context context, int layout, Cursor c,
				String[] from, int[] to,int catagoryID) {
			super(context, layout, c, from, to);
			String[] mCursorCols = new String[] { MediaStore.OnLine.ID,
					MediaStore.OnLine.NAME, MediaStore.OnLine.URL ,MediaStore.OnLine.CATAGORY_ID,MediaStore.OnLine.CATAGORY_VALUE};

			mCatagoryID = catagoryID;
			ArrayListCursor currentCursor = new ArrayListCursor(mCursorCols, currentArray,MediaStore.OnLine.CATAGORY_ID,mCatagoryID);
			changeCursor(currentCursor);
		}
	}

 通过这个适配其将百度音乐页头的那部分按照android的布局显示出来,具体处理就不细说了。当用户点击一个分类是则显示该类别下的所有音乐,这个暂时未实行。不过点击一个歌手类别时显示该类别下所有歌手已经完成,代码如下

	private void initCursor() {
		// 创建URL对象
               //给定一个URL,例如http://list.mp3.baidu.com/top/top200.html



		String rex = "<td><span>(.*?)\\.</span><a href=\"(.*?)\".*?>(.*?)</a></td>";
		ArrayList<ArrayList<Object>> result = Rex.match(mOnlineURL, rex);
		mCursorCols = new String[] { MediaStore.OnLine.ID,MediaStore.OnLine.RANK,
				MediaStore.OnLine.URL, MediaStore.OnLine.NAME };

		mTrackCursor = new ArrayListCursor(mCursorCols, result);

	}

 这样播放在线音乐的资源大类已经基本都实现了,接下来就是歌曲资源的解析和播放。

转载于http://ishelf.iteye.com/admin/blogs/733920

0
0
分享到:
评论

相关推荐

    微信小程序源码医院挂号系统设计与实现-服务端-毕业设计.zip

    本项目致力于设计与实现一个基于微信小程序的医院挂号系统,通过整合线上线下资源,旨在为用户提供便捷、高效的医疗服务体验。系统主要功能包括在线预约挂号、科室医生信息查询、就诊记录查看以及排队叫号通知等。通过微信小程序平台,用户可以直接在手机上进行挂号操作,避免了现场排队等待的烦恼。服务端采用高效稳定的技术架构,确保系统的安全性和响应速度。开发此项目的目的在于利用现代信息技术优化医院挂号流程,减少患者的时间成本,提高医院运营效率。项目不仅提升了用户体验,还为医院管理提供了数据支持,实现医疗资源的合理分配。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    创新创业计划实战经验分享:项目管理、市场推广、融资与团队建设

    内容概要:本文详细介绍了创新创业项目的实战经验,涵盖项目策划与启动、产品开发与迭代、市场推广与营销、融资策略与财务管理、团队管理与文化建设五个方面。作者通过具体案例和数据分析,分享了市场调研、产品迭代、多渠道营销、多元化融资以及团队建设的经验。 适合人群:创业者、企业管理人员、市场营销人员、投融资专家、产品经理。 使用场景及目标:① 创业项目的前期策划和市场调研;② 产品开发过程中用户反馈和技术创新的管理;③ 市场推广策略的制定和执行;④ 多元化融资渠道的选择和管理;⑤ 团队建设与文化建设的实际操作方法。 其他说明:本文不仅提供了实际的操作步骤和经验总结,还结合了大量具体的数据分析,使得读者可以更好地理解和应用这些方法。

    基于java+springboot+vue+mysql的公交线路查询系统 源码+数据库+论文(高分毕业设计).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea、vscode 数据库:MySql5.7以上 部署环境:maven 数据库工具:navicat

    【南华期货-2024研报】南华期货沥青产业周报:上周逻辑延续,原料成本端影响或再度主导.pdf

    【南华期货-2024研报】南华期货沥青产业周报:上周逻辑延续,原料成本端影响或再度主导.pdf

    漏洞检测的AMPLE 框架-可运行的,含代码和数据集

    1. 引言 指出深度学习(DL)在自动化软件漏洞检测方面有成效,图神经网络(GNNs)虽常用于现有基于 DL 的漏洞检测方法,但存在难以处理代码结构图中长距离节点连接以及未能充分利用多种类型边(如数据流、控制流相关边)的局限,导致难以捕获代码图的全局信息。为此提出 AMPLE 框架,包含图简化和增强图表示学习两部分来缓解这些问题,并通过实验证明了其有效性。 2. 数据集 采用来自三篇相关论文的三个漏洞数据集,分别给出了对应数据集的链接,用于研究 AMPLE 的有效性。 3. 需求 代码基于 Python3(>= 3.7)编写,列出了运行代码所需的主要依赖库及其对应版本,如 torch (==1.9.0)、dgl (==0.7.2)等,同时介绍了 AMPLE 中的默认训练配置参数,如批次大小、学习率、训练轮数等具体取值。 4. 预处理 利用 Joern 生成代码结构图源文件,提供了编译版本的 Joern 链接,强调不同版本 Joern 生成的图可能使模型性能有差异。还介绍了数据处理文件夹下的代码功能,如 data_processing\word2vec.py 用于训练词向量模型。

    基于openCV和MFC的超混沌图像加密文档+源码+全部资料+优秀项目.zip

    【资源说明】 基于openCV和MFC的超混沌图像加密文档+源码+全部资料+优秀项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!OpenCV

    岗位竞聘个人简历PPT模版6

    岗位竞聘个人简历PPT模版,突出个人优势与岗位匹配度,助力竞聘者脱颖而出,助力竞聘成功‌。

    基于前端期末大作业一个静态的电影网站源码+文档+高分项目+全部资料.zip

    【资源说明】 基于前端期末大作业一个静态的电影网站源码+文档+高分项目+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    MATLAB实现BiTCN-BiGRU-Mutilhead-Attention双向时间卷积网络结合双向门控循环单元网络融合多头注意力机制多变量时间序列预测(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了基于MATLAB实现的BiTCN-BiGRU-Multihead-Attention多变量时间序列预测模型。模型结合了双向时间卷积网络(BiTCN)、双向门控循环单元(BiGRU)和多头注意力机制(Multihead Attention),用于高效准确地处理多变量时间序列数据。文档涵盖了项目背景、目标与意义、挑战、创新点、应用领域、效果预测图设计、模型架构及代码实现等多方面的内容。通过详细的数据预处理、模型训练、评估和可视化步骤,确保了模型的高效性和可操作性。 适合人群:具备一定MATLAB编程基础和深度学习知识的数据科学家、研究人员和工程师。 使用场景及目标:①适用于金融、气象、医疗、能源管理等多个领域的多变量时间序列预测任务;②通过该模型,可以提高预测精度,支持决策者的科学决策。 其他说明:本文档提供了详细的代码示例和GUI设计,用户可以通过这些示例快速上手,并根据自己的需求进行调整和扩展。文档还讨论了常见的技术挑战和应对策略,帮助用户更好地理解和优化模型。

    基于网页设计期末作业(漫画网站)源码+文档+高分项目+全部资料.zip

    【资源说明】 基于网页设计期末作业(漫画网站)源码+文档+高分项目+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    hello-world 镜像

    hello-world 镜像

    基于opencv的java车牌检测识别库支持linux、windows、mac、Android平台文档+源码+全部资料+优秀项目.zip

    【资源说明】 基于opencv的java车牌检测识别库支持linux、windows、mac、Android平台文档+源码+全部资料+优秀项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!OpenCV

    STM32F103单片机连接EC800-4G模块发送温度数据到阿里云物联网IOT平台.zip

    1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用KEIL 标准库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。

    STM32F103单片机连接EC800-4G模块采集GNSS定位数据和多组传感器数据上传到ONENET云平台并接收控制指令.zip

    1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用KEIL 标准库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。

    STM32F103单片机连接EC800-4G模块发送RS485串口数据到TCP服务器并在TFT液晶屏上显示.zip

    1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用KEIL 标准库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件下载时,请注意keil选择项是jlink还是stlink。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。

    软件著作权合作开发协议模板(多人专用版)

    软件著作权合作开发协议模板(多人专用版),包含具体权益说明。

    基于小程序的西餐外卖系统的设计与实现NodeJS源代码(完整前后端+mysql).zip

    功能说明: 环境说明: 开发语言:Java 服务器:tomcat7及以上 JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者。。。

    2_词法分析(上机)(2).pptx

    2_词法分析(上机)(2).pptx

    基于python的医疗问句中的实体识别算法的研究(flask)源代码(完整前后端+mysql+说明文档+LW).zip

    功能就是爬取医疗的知识,构建医疗的知识图谱,基于LSTM,CRF抽取问答中的实体,分类实体类型属于已知的哪一类,再去针对不同的类别做回答,形成的效果就是阿莫西林的作用是啥?首先分类提取出来实体的阿莫西林这个药品,再去找实体对应的关系,最终找到对应的答案返回给用户。 环境说明: 开发语言:python Python版本:3.6.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:pycharm

    物联网设备接入与管理系统架构及界面展示案例

    内容概要:本文档介绍了港机系统的设备接入和管理,涵盖了设备接入流程、系统架构、界面展示等方面的内容。具体包括数据和设备的接入方式、系统的总体结构图以及多个实际操作界面截图,如设备运行状态、设备管理仪表盘、设备接入网关、物联网卡管理和移动端界面。 适合人群:物联网设备开发与管理人员、系统架构师。 使用场景及目标:主要用于理解和设计物联网设备的接入和管理系统,帮助技术人员快速掌握系统架构及各模块的功能。同时,为项目实施提供具体的参考案例。 阅读建议:本文档详细展示了物联网设备接入和管理的实际案例,建议读者重点关注设备接入流程、系统架构图及各功能界面的设计。

Global site tag (gtag.js) - Google Analytics