`

MP3播放器项目---编写代码---5

阅读更多

                                        MP3播放器项目---编写代码---5

1.Mp3ListContentHandler

package hui.xml;

import hui.model.Mp3Info;

import java.util.List;


import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class Mp3ListContentHandler extends DefaultHandler {
	private List<Mp3Info> infos = null;
	private Mp3Info mp3Info = null;
	private String tagName = null;

	public Mp3ListContentHandler(List<Mp3Info> infos) {
		super();
		this.infos = infos;
	}

	public List<Mp3Info> getInfos() {
		return infos;
	}

	public void setInfos(List<Mp3Info> infos) {
		this.infos = infos;
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		String temp = new String(ch, start, length);
		if (tagName.equals("id")) {
			mp3Info.setId(temp);
		} else if (tagName.equals("mp3.name")) {
			mp3Info.setMp3Name(temp);
		} else if (tagName.equals("mp3.size")) {
			mp3Info.setMp3Size(temp);
		} else if (tagName.equals("lrc.name")) {
			mp3Info.setLrcName(temp);
		} else if (tagName.equals("lrc.size")) {
			mp3Info.setLrcSize(temp);
		}
	}

	@Override
	public void endDocument() throws SAXException {
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (qName.equals("resource")) {
			infos.add(mp3Info);
		}
		tagName = "";

	}

	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.startDocument();
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		this.tagName = localName;
		if (tagName.equals("resource")) {
			mp3Info = new Mp3Info();
		}
	}

}

 

2.AppConstant

package hui.mp3player;

public interface AppConstant {
	public class PlayerMsg{
		public static final int PLAY_MSG = 1;
		public static final int PAUSE_MSG = 2;
		public static final int STOP_MSG = 3;
	}
	public class URL{
		public static final String BASE_URL = "http://192.168.1.2:8080/myapp/";
	}
}

 

3.DownloadService

package hui.mp3player;

import hui.download.HttpDownloader;
import hui.model.Mp3Info;
import hui.mp3player.AppConstant;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class DownloadService extends Service{

 @Override
 public IBinder onBind(Intent intent) {
  // TODO Auto-generated method stub
  return null;
 }

 //每次用户点击ListActivity当中的一个条目时,就会调用该方法
 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
  // TODO Auto-generated method stub
  //从Intent对象当中将Mp3Info对象取出
  Mp3Info mp3Info = (Mp3Info)intent.getSerializableExtra("mp3Info");
  //生成一个下载线程,并将Mp3Info对象作为参数传递到线程对象当中
  System.out.print("service----------"+mp3Info);
  DownloadThread downloadThread = new DownloadThread(mp3Info);
  //启动新线程
  Thread thread = new Thread(downloadThread);
  thread.start();
  return super.onStartCommand(intent, flags, startId);
 }
 
 class DownloadThread implements Runnable{
  private Mp3Info mp3Info = null;
  public DownloadThread(Mp3Info mp3Info){
   this.mp3Info = mp3Info;
  }
  @Override
  public void run() {
   //下载地址http://192.168.1.107:8081/mp3/a1.mp3
   //根据MP3文件的名字,生成下载地址
   String mp3Url = AppConstant.URL.BASE_URL + mp3Info.getMp3Name();
   String lrcUrl = AppConstant.URL.BASE_URL + mp3Info.getLrcName();
   //生成下载文件所用的对象
   HttpDownloader httpDownloader = new HttpDownloader();
   //将文件下载下来,并存储到SDCard当中
   int mp3Result = httpDownloader.downFile(mp3Url, "mp3/", mp3Info.getMp3Name());
   int lrcResult = httpDownloader.downFile(lrcUrl, "mp3/", mp3Info.getLrcName());
   /*String resultMessage = null;
   if(result == -1){
    resultMessage = "下载失败";
   }
   else if(result == 0){
    resultMessage = "文件已经存在,不需要重复下载";
   }
   else if(result == 1){
    resultMessage = "文件下载成功";
   }*/
   //使用Notification提示客户下载结果
  }
  
 }

}
4.LocalMp3ListActivity

package hui.mp3player;

import hui.model.Mp3Info;
import hui.utils.FileUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import mars.mp3player.R;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class LocalMp3ListActivity extends ListActivity {
	private List<Mp3Info> mp3Infos = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.local_mp3_list);

	}

	@Override
	protected void onResume() {
		FileUtils fileUtils = new FileUtils();
		mp3Infos = fileUtils.getMp3Files("mp3/");
		List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
		for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
			Mp3Info mp3Info = (Mp3Info) iterator.next();
			HashMap<String, String> map = new HashMap<String, String>();
			map.put("mp3_name", mp3Info.getMp3Name());
			map.put("mp3_size", mp3Info.getMp3Size());
			list.add(map);
		}

		SimpleAdapter simpleAdapter = new SimpleAdapter(this, list,
				R.layout.mp3info_item, new String[] { "mp3_name", "mp3_size" },
				new int[] { R.id.mp3_name, R.id.mp3_size });
		setListAdapter(simpleAdapter);
		super.onResume();
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		if(mp3Infos != null){
			Mp3Info mp3Info = mp3Infos.get(position);
			Intent intent = new Intent();
			intent.putExtra("mp3Info", mp3Info);
			intent.setClass(this, PlayerActivity.class);
			startActivity(intent);
		}
	}

}

 

5.MainActivity

package hui.mp3player;

import mars.mp3player.R;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;

public class MainActivity extends TabActivity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		//得到TabHost对象,正对TabActivity的操作通常都有这个对象完成
		TabHost tabHost = getTabHost();
		//生成一个Intent对象,该对象指向一个Activity
		Intent remoteIntent = new Intent();
		remoteIntent.setClass(this, Mp3ListActivity.class);
		//生成一个TabSpec对象,这个对象代表了一个页
		TabHost.TabSpec remoteSpec = tabHost.newTabSpec("Remote");
		Resources res = getResources();
		//设置该页的indicator
		remoteSpec.setIndicator("Remote", res.getDrawable(android.R.drawable.stat_sys_download));
		//设置该页的内容
		remoteSpec.setContent(remoteIntent);
		//将设置好的TabSpec对象添加到TabHost当中
		tabHost.addTab(remoteSpec);
		
		Intent localIntent = new Intent();
		localIntent.setClass(this, LocalMp3ListActivity.class);
		TabHost.TabSpec localSpec = tabHost.newTabSpec("Local");
		localSpec.setIndicator("Local", res.getDrawable(android.R.drawable.stat_sys_upload));
		localSpec.setContent(localIntent);
		tabHost.addTab(localSpec);
	}
}

 

分享到:
评论
2 楼 xiaoyangh 2012-04-28  
哪个xml?麻烦说明白点
1 楼 pan147852 2012-02-20  
高手 请问这个xml文档应怎么布局呀 求帮忙 !!

相关推荐

    用C#编写的MP3播放器,含源代码

    用C#编写的MP3播放器,含源代码,能够实现添加歌曲,播放,暂停,等基本的常见功能。

    STM32F103单片机HAL库例程-VS1053音乐MP3播放器(SD卡+vs1053+FATFS文件系统).rar

    1、嵌入式物联网单片机项目开发实战。例程经过精心编写,简单好用。 2、代码使用KEIL HAL库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件...

    Xtreme Media Player:Xtreme Media Player 是一款免费的跨平台媒体播放器。-开源

    XtremeMP 是一个免费、稳定的开源跨平台媒体播放器和可视化工具——100% 纯 Java 编写。 当前版本仅实现了音乐播放器和可视化器。 对其他媒体的支持将在未来的版本中提供。 它为用户提供了用于选择音乐文件和播放...

    c语言c++项目源代码_c语言做的播放器源码.rar

    该播放器源码采用C语言编写,具有跨平台的优势,可在Windows、Linux等多种操作系统下运行。它支持多种音频和视频格式,包括MP3、MP4、AVI等常见格式,以及部分非主流格式。同时,源码中集成了音频视频解码器,无需...

    STM32F103开发例程-ucos操作系统+ucgui实现4.3寸(SSD1963)屏显示MP3播放器应用例程.rar

    1、嵌入式物联网单片机项目开发实战。例程经过精心编写,简单好用。 2、代码使用KEIL 标准库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、...

    STM32F103单片机HAL库例程-MP3音乐播放器实验.rar

    1、嵌入式物联网单片机项目开发实战。例程经过精心编写,简单好用。 2、代码使用KEIL HAL库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 3、软件...

    YOYOPlayer1.1

    尽量减少播放器没有声音的情况. 2,增加在任务栏滚动显示歌曲标题. 3,支持设置代理服务器连接网络. 4,支持对播放列表进行一些细化的设置,因为程序预设的颜色不一定符合大家的审美观. 5,配置目录现在改为{...

    JAVA上百实例源码以及开源项目源代码

     用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例  Message-Driven Bean EJB实例源代码,演示...

    vc代码合集

    0 1.txt 2012-06-11 11:00 76,093 178个经典c语言源代码.rar 2012-06-11 10:10 195 1小时后关机.bat 2012-06-11 10:10 68 1小时后关机.vbs ...2012-06-11 10:17 4,894,598 项目专题2(MP3播放器).rar

    易语言程序免安装版下载

    “库文件名”以.lib或.obj为后缀的将被视为静态库,可使用绝对路径或相对路径(相对当前源代码所在目录),如依赖多个静态库请分别列出并以逗号分隔;“在库中的对应命令名”请务必准确填写静态库中公开导出的符号...

    新版Android开发教程.rar

    开放手机联盟, Open Handset Alliance :是美国 Google 公司与 2007 年 11 月 5 日宣布组建的一个全球性的联 盟组织。这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 ...

    vc++ 开发实例源码包

    内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...

    java源码包---java 源码 大量 实例

     用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例  Message-Driven Bean EJB实例源代码,演示...

    基于AT89C51单片机的音乐播放器课程设计.doc

    设计任务与要求 基于单片机的音乐播放器可应用于mp3,MP4,扩音器等很多方面,并可作为很多系统的 辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波 信号,也可以产生包括"Do"、"Re...

    传智播客Android视频教程-课程源码.rar

    编写代码完成添删改查操作(两种实现方法) E.事务的实现 F.采用ListView实现数据列表显示 2&gt; 采用ContentProvider对外共享数据 第四天 1&gt; 往通信录添加联系人,和获取联系人 2&gt; 网络--获取数据(图片、网页、xml...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:...

    JAVA上百实例源码以及开源项目

     用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例  Message-Driven Bean EJB实例源代码,演示...

    VC视频音频开发实用工程案例精选光盘源码

    第8章,介绍了MP3编解码的知识,同时实现了一个功能强大的MP3播放器。 第9章,介绍了Xvid Quants Parser(XvidQP)系统的实现。 第10章,介绍了DirectShow的应用架构及大量常用实例。 .第11章,主要讲述了Directx...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:...

Global site tag (gtag.js) - Google Analytics