- 浏览: 24371 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
xiaoyangh:
哪个xml?麻烦说明白点
MP3播放器项目---编写代码---5 -
pan147852:
高手 请问这个xml文档应怎么布局呀 求帮忙 !!
MP3播放器项目---编写代码---5 -
xiaoyangh:
先自己
windows server 2008 R2 and redhat 服务器性能测试
MP3播放器项目---编写代码---6
1. Mp3ListActivity
package hui.mp3player; import hui.download.HttpDownloader; import hui.model.Mp3Info; import hui.xml.Mp3ListContentHandler; import java.io.InputStreamReader; import java.io.StringReader; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import javax.xml.parsers.SAXParserFactory; import hui.mp3player.R; import hui.download.*; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import hui.mp3player.*; import android.R.xml; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; public class Mp3ListActivity extends ListActivity { private static final int UPDATE = 1; private static final int ABOUT = 2; private List<Mp3Info> mp3Infos = null; private static final String XML_URL=null; /** * 在用点击MENU按钮之后,会调用该方法,我们可以在这个方法当中加入自己的按钮控件 */ @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, UPDATE, 1, R.string.mp3list_update); menu.add(0, ABOUT, 2, R.string.mp3list_about); return super.onCreateOptionsMenu(menu); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.remote_mp3_list); updateListView(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == UPDATE) { updateListView(); } else if (item.getItemId() == ABOUT) { // 用户点击了关于按钮 } return super.onOptionsItemSelected(item); } private SimpleAdapter buildSimpleAdapter(List<Mp3Info> mp3Infos) { // 生成一个List对象,并按照SimpleAdapter的标准,将mp3Infos当中的数据添加到List当中去 List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) { Mp3Info mp3Info = (Mp3Info) iterator.next(); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("mp3_name", mp3Info.getMp3Name()); map.put("mp3_size", mp3Info.getMp3Size()); map.put("mp3_icon", R.drawable.kky); //map.put("mp3_icon", R.drawable.i2); //map.put("mp3_icon", R.drawable.i3); list.add(map); } // 创建一个SimpleAdapter对象 SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.mp3info_item, new String[] { "mp3_name", "mp3_size","mp3_icon" }, new int[] { R.id.mp3_name, R.id.mp3_size,R.id.mp3_icon }); // 将这个SimpleAdapter对象设置到ListActivity当中 return simpleAdapter; } private void updateListView() { // 用户点击了更新列表按钮 // 下载包含所有Mp3基本信息的xml文件 String xml = downloadXML("http://192.168.1.2:8080/myapp/11.xml"); // 对xml文件进行解析,并将解析的结果放置到Mp3Info对象当中,最后将这些Mp3Info对象放置到List当中 mp3Infos = parse(xml); SimpleAdapter simpleAdapter = buildSimpleAdapter(mp3Infos); setListAdapter(simpleAdapter); } private String downloadXML(String urlStr) { HttpDownloader httpDownloader = new HttpDownloader(); String result = httpDownloader.download(urlStr); return result; } private List<Mp3Info> parse(String xmlStr) { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); List<Mp3Info> infos = new ArrayList<Mp3Info>(); try { URL url=new URL("http://192.168.1.2:8080/myapp/11.xml"); //System.out.print("url-------"+url); //Mp3Info mp3info = new Mp3Info(); //Mp3Info mp3Info1 = mp3Info1.getMp3Name(); //String uriStr=XML_URL+URLEncoder.encode(mp3Info1.getMp3Name(),"UTF-8"); //URL url=new URL(uriStr); XMLReader xmlReader = saxParserFactory.newSAXParser() .getXMLReader(); Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler( infos); xmlReader.setContentHandler(mp3ListContentHandler); InputStreamReader isr =new InputStreamReader(url.openStream(),"GB2312"); //StringReader stringReader = new StringReader(resultStr); InputSource inputSource = new InputSource(isr); //StringReader stringReader = new StringReader(xmlStr); //InputSource inputSource = new InputSource(stringReader); xmlReader.parse(inputSource); for (Iterator iterator = infos.iterator(); iterator.hasNext();) { Mp3Info mp3Info = (Mp3Info) iterator.next(); System.out.println("显示111-------"+mp3Info); } } catch (Exception e) { e.printStackTrace(); } return infos; } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // 根据用户点击列表当中的位置来得到响应的Mp3Info对象 Mp3Info mp3Info = mp3Infos.get(position); // 生成Intent对象 Intent intent = new Intent(); System.out.print("点击-----"+ mp3Info); // 将Mp3Info对象存入到Intent对象当中 intent.putExtra("mp3Info", mp3Info); intent.setClass(this, DownloadService.class); // 启动Service startService(intent); super.onListItemClick(l, v, position, id); } }
2.PlayerActivity
package hui.mp3player; import hui.lrc.LrcProcessor; import hui.model.Mp3Info; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; import java.util.Queue; import hui.mp3player.R; import android.app.Activity; import android.content.Intent; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.TextView; public class PlayerActivity extends Activity { ImageButton beginButton = null; ImageButton pauseButton = null; ImageButton stopButton = null; MediaPlayer mediaPlayer = null; private ArrayList<Queue> queues = null; private TextView lrcTextView = null; private Mp3Info mp3Info = null; private Handler handler = new Handler(); private UpdateTimeCallback updateTimeCallback = null; private long begin = 0; private long nextTimeMill = 0; private long currentTimeMill = 0; private String message = null; private long pauseTimeMills = 0; private boolean isPlaying = false; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.player); Intent intent = getIntent(); mp3Info = (Mp3Info) intent.getSerializableExtra("mp3Info"); beginButton = (ImageButton) findViewById(R.id.begin); pauseButton = (ImageButton) findViewById(R.id.pause); stopButton = (ImageButton) findViewById(R.id.stop); beginButton.setOnClickListener(new BeginButtonListener()); pauseButton.setOnClickListener(new PauseButtonListener()); stopButton.setOnClickListener(new StopButtonListener()); lrcTextView = (TextView)findViewById(R.id.lrcText); } /** * 根据歌词文件的名字,来读取歌词文件当中的信息 * @param lrcName */ private void prepareLrc(String lrcName){ try { InputStream inputStream = new FileInputStream(Environment.getExternalStorageDirectory().getAbsoluteFile() +File.separator + "mp3/" + mp3Info.getLrcName()); LrcProcessor lrcProcessor = new LrcProcessor(); queues = lrcProcessor.process(inputStream); //创建一个UpdateTimeCallback对象 updateTimeCallback = new UpdateTimeCallback(queues); begin = 0 ; currentTimeMill = 0 ; nextTimeMill = 0 ; } catch (FileNotFoundException e) { e.printStackTrace(); } } class BeginButtonListener implements OnClickListener { @Override public void onClick(View v) { //创建一个Intent对象,用于同时Service开始播放MP3 Intent intent = new Intent(); intent.setClass(PlayerActivity.this, PlayerService.class); intent.putExtra("mp3Info", mp3Info); intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG); //读取LRC文件 prepareLrc(mp3Info.getLrcName()); //启动Service startService(intent); //将begin的值置为当前毫秒数 begin = System.currentTimeMillis(); //执行updateTimeCallback handler.postDelayed(updateTimeCallback, 5); isPlaying = true; } } class PauseButtonListener implements OnClickListener { @Override public void onClick(View v) { //通知Service暂停播放MP3 Intent intent = new Intent(); intent.setClass(PlayerActivity.this, PlayerService.class); intent.putExtra("MSG", AppConstant.PlayerMsg.PAUSE_MSG); startService(intent); // if(isPlaying){ handler.removeCallbacks(updateTimeCallback); pauseTimeMills = System.currentTimeMillis(); } else{ handler.postDelayed(updateTimeCallback, 5); begin = System.currentTimeMillis() - pauseTimeMills + begin; } isPlaying = isPlaying ? false : true; } } class StopButtonListener implements OnClickListener { @Override public void onClick(View v) { //通知Service停止播放MP3文件 Intent intent = new Intent(); intent.setClass(PlayerActivity.this, PlayerService.class); intent.putExtra("MSG", AppConstant.PlayerMsg.STOP_MSG); startService(intent); //从Handler当中移除updateTimeCallback handler.removeCallbacks(updateTimeCallback); } } class UpdateTimeCallback implements Runnable{ Queue times = null; Queue messages = null; public UpdateTimeCallback(ArrayList<Queue> queues) { //从ArrayList当中取出相应的对象对象 times = queues.get(0); messages = queues.get(1); } @Override public void run() { //计算偏移量,也就是说从开始播放MP3到现在为止,共消耗了多少时间,以毫秒为单位 long offset = System.currentTimeMillis() - begin; if(currentTimeMill == 0){ nextTimeMill = (Long)times.poll(); message = (String)messages.poll(); } if(offset >= nextTimeMill){ lrcTextView.setText(message); message = (String)messages.poll(); nextTimeMill = (Long)times.poll(); } currentTimeMill = currentTimeMill + 10; handler.postDelayed(updateTimeCallback, 10); } } }
3.PlayerService
package hui.mp3player; import hui.lrc.LrcProcessor; import hui.model.Mp3Info; import hui.mp3player.AppConstant; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; import java.util.Queue; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.net.Uri; import android.os.Environment; import android.os.IBinder; public class PlayerService extends Service { private boolean isPlaying = false; private boolean isPause = false; private boolean isReleased = false; private MediaPlayer mediaPlayer = null; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Mp3Info mp3Info = (Mp3Info) intent.getSerializableExtra("mp3Info"); int MSG = intent.getIntExtra("MSG", 0); if (mp3Info != null) { if(MSG == AppConstant.PlayerMsg.PLAY_MSG){ play(mp3Info); } } else { if(MSG == AppConstant.PlayerMsg.PAUSE_MSG){ pause(); } else if(MSG == AppConstant.PlayerMsg.STOP_MSG){ stop(); } } return super.onStartCommand(intent, flags, startId); } private void play(Mp3Info mp3Info) { String path = getMp3Path(mp3Info); mediaPlayer = MediaPlayer.create(this, Uri.parse("file://" + path)); mediaPlayer.setLooping(false); mediaPlayer.start(); isPlaying = true; isReleased = false; } private void pause() { if (mediaPlayer != null) { if (!isReleased) { if (!isPause) { mediaPlayer.pause(); isPause = true; isPlaying = true; } else { mediaPlayer.start(); isPause = false; } } } } private void stop() { if (mediaPlayer != null) { if (isPlaying) { if (!isReleased) { mediaPlayer.stop(); mediaPlayer.release(); isReleased = true; } isPlaying = false; } } } private String getMp3Path(Mp3Info mp3Info) { String SDCardRoot = Environment.getExternalStorageDirectory() .getAbsolutePath(); String path = SDCardRoot + File.separator + "mp3" + File.separator + mp3Info.getMp3Name(); return path; } }
上个图------很丑---UI搞得很辛苦所以放弃了,弄下天气的程序
相关推荐
用C#编写的MP3播放器,含源代码,能够实现添加歌曲,播放,暂停,等基本的常见功能。
1、嵌入式物联网单片机项目开发实战。...6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件差异,请根据自身情况适当调整代码,程序仅供参考。 8、代码有注释说明,请耐心阅读。
XtremeMP 是一个免费、稳定的开源跨平台媒体播放器和可视化工具——100% 纯 Java 编写。 当前版本仅实现了音乐播放器和可视化器。 对其他媒体的支持将在未来的版本中提供。 它为用户提供了用于选择音乐文件和播放...
该播放器源码采用C语言编写,具有跨平台的优势,可在Windows、Linux等多种操作系统下运行。它支持多种音频和视频格式,包括MP3、MP4、AVI等常见格式,以及部分非主流格式。同时,源码中集成了音频视频解码器,无需...
1、嵌入式物联网单片机项目开发实战。例程经过精心编写,简单好用。 2、代码使用KEIL 标准库...6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件差异,请根据自身情况适当调整代码,程序仅供参考。
1、嵌入式物联网单片机项目开发实战。...6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件差异,请根据自身情况适当调整代码,程序仅供参考。 8、代码有注释说明,请耐心阅读。
默认的歌词目录是{user.home}/.YOYOPlayer/Lyrics/ <br>在首选项里在的还有很多功能没有实现,因为个人的精力实在有限,YOYOPlayer项目已经在sourceforge.net和java.net申请了项目,正在审核中,等审核通过了,欢迎...
用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示...
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为后缀的将被视为静态库,可使用绝对路径或相对路径(相对当前源代码所在目录),如依赖多个静态库请分别列出并以逗号分隔;“在库中的对应命令名”请务必准确填写静态库中公开导出的符号...
放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了 43 家。 移动手机联盟创始成员: Aplix 、 Ascender 、 Audience 、 Broadcom 、中国移动、 eBay ...
内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...
用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示...
设计任务与要求 基于单片机的音乐播放器可应用于mp3,MP4,扩音器等很多方面,并可作为很多系统的 辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波 信号,也可以产生包括"Do"、"Re...
编写代码完成添删改查操作(两种实现方法) E.事务的实现 F.采用ListView实现数据列表显示 2> 采用ContentProvider对外共享数据 第四天 1> 往通信录添加联系人,和获取联系人 2> 网络--获取数据(图片、网页、xml...
Java吃豆子游戏源代码 6个目标文件 内容索引:JAVA源码,游戏娱乐,JAVA游戏源码 JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中...
用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示...
第8章,介绍了MP3编解码的知识,同时实现了一个功能强大的MP3播放器。 第9章,介绍了Xvid Quants Parser(XvidQP)系统的实现。 第10章,介绍了DirectShow的应用架构及大量常用实例。 .第11章,主要讲述了Directx...
Java吃豆子游戏源代码 6个目标文件 内容索引:JAVA源码,游戏娱乐,JAVA游戏源码 JAVA编写的吃豆子游戏,类似疯狂坦克一样,至少界面有点像。大家可以看截图。 Java从网络取得文件 1个目标文件 简单 Java从压缩包中...