实现功能:播放网络音频,无需下载,边加载边下载,并支持拖动.此项目参看某一个前辈的博客.

如有问题可以回帖留言,能够得到大家的指导:

代码如下:

布局文件:

        
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="horizontal"
  6. >
  7. <Button
  8. android:id="@+id/btnPlayUrl"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="播放">
  12. </Button>
  13. <SeekBar
  14. android:id="@+id/skbProgress"
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. android:layout_gravity="center_vertical"
  18. android:max="100"
  19. android:paddingLeft="10dip"
  20. android:paddingRight="10dip">
  21. </SeekBar>
  22. </LinearLayout>

主Activity

        
  1. importandroid.os.Bundle;
  2. importandroid.app.Activity;
  3. importandroid.view.View;
  4. importandroid.view.View.OnClickListener;
  5. importandroid.widget.Button;
  6. importandroid.widget.SeekBar;
  7. publicclassMainActivityextendsActivityimplementsOnClickListener{
  8. privateButtonbtnPlayUrl;
  9. privateSeekBarskbProgress;
  10. privatePlayerplayer;
  11. intprogress;
  12. @Override
  13. publicvoidonCreate(BundlesavedInstanceState){
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. btnPlayUrl=(Button)this.findViewById(R.id.btnPlayUrl);
  17. btnPlayUrl.setOnClickListener(this);
  18. skbProgress=(SeekBar)this.findViewById(R.id.skbProgress);
  19. skbProgress.setOnSeekBarChangeListener(newSeekBarChangeEvent());
  20. player=newPlayer(skbProgress);
  21. }
  22. @Override
  23. publicvoidonClick(Viewv){
  24. intid=v.getId();
  25. switch(id){
  26. caseR.id.btnPlayUrl:
  27. //网络音频地址
  28. Stringurl="http://www........aaa.amr";
  29. player.playUrl(url);
  30. break;
  31. default:
  32. break;
  33. }
  34. }
  35. classSeekBarChangeEventimplementsSeekBar.OnSeekBarChangeListener{
  36. @Override
  37. publicvoidonProgressChanged(SeekBarseekBar,intprogress,
  38. booleanfromUser){
  39. MainActivity.this.progress=progress
  40. *player.mediaPlayer.getDuration()/seekBar.getMax();
  41. }
  42. @Override
  43. publicvoidonStartTrackingTouch(SeekBarseekBar){
  44. }
  45. @Override
  46. publicvoidonStopTrackingTouch(SeekBarseekBar){
  47. player.mediaPlayer.seekTo(progress);
  48. }
  49. }
  50. }

播放器

        
  1. importjava.io.IOException;
  2. importjava.util.Timer;
  3. importjava.util.TimerTask;
  4. importandroid.media.AudioManager;
  5. importandroid.media.MediaPlayer;
  6. importandroid.os.Handler;
  7. importandroid.os.Message;
  8. importandroid.util.Log;
  9. importandroid.widget.SeekBar;
  10. publicclassPlayerimplementsMediaPlayer.OnPreparedListener{
  11. publicMediaPlayermediaPlayer;
  12. privateSeekBarskbProgress;
  13. privateTimermTimer=newTimer();
  14. publicPlayer(SeekBarskbProgress)
  15. {
  16. this.skbProgress=skbProgress;
  17. try{
  18. mediaPlayer=newMediaPlayer();
  19. mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  20. mediaPlayer.setOnPreparedListener(this);
  21. }catch(Exceptione){
  22. Log.e("mediaPlayer","error",e);
  23. }
  24. mTimer.schedule(mTimerTask,0,10);
  25. }
  26. TimerTaskmTimerTask=newTimerTask(){
  27. @Override
  28. publicvoidrun(){
  29. if(mediaPlayer==null)
  30. return;
  31. if(mediaPlayer!=null){
  32. if(mediaPlayer.isPlaying()&&skbProgress.isPressed()==false){
  33. handleProgress.sendEmptyMessage(0);
  34. }
  35. }
  36. }
  37. };
  38. HandlerhandleProgress=newHandler(){
  39. publicvoidhandleMessage(Messagemsg){
  40. if(mediaPlayer==null){
  41. return;
  42. }
  43. intposition=mediaPlayer.getCurrentPosition();
  44. intduration=mediaPlayer.getDuration();
  45. if(duration>0){
  46. longpos=skbProgress.getMax()*position/duration;
  47. skbProgress.setProgress((int)pos);
  48. }
  49. };
  50. };
  51. publicvoidplayUrl(StringvideoUrl)
  52. {
  53. try{
  54. mediaPlayer.reset();
  55. mediaPlayer.setDataSource(videoUrl);
  56. mediaPlayer.prepareAsync();
  57. }catch(IllegalArgumentExceptione){
  58. e.printStackTrace();
  59. }catch(IllegalStateExceptione){
  60. e.printStackTrace();
  61. }catch(IOExceptione){
  62. e.printStackTrace();
  63. }
  64. }
  65. @Override
  66. publicvoidonPrepared(MediaPlayerarg0){
  67. arg0.start();
  68. Log.e("mediaPlayer","onPrepared");
  69. }
  70. }

实现图片:

更多相关文章

  1. android之帧动画实现
  2. Android获取系统时间以及网络时间
  3. Android(安卓)监听网络状态
  4. android音乐播放器开发 SweetMusicPlayer 播放本地音乐
  5. android 网络监测
  6. Android开发入门之网络通信(网页源码查看器)
  7. Android监听网络状态
  8. Android(安卓)网络下载文件 图片 httpurl
  9. Android音乐播放器-图片素材准备及布局

随机推荐

  1. CentOS7.5 安装MySql的教程
  2. mysql split函数用逗号分隔的实现
  3. MySQL中将一列以逗号分隔的值行转列的实
  4. MySQL将一个字段中以逗号分隔的取出来形
  5. Android(安卓)—— SQLite数据库简易使用
  6. Android开发人员需要具备的知识(很全)!
  7. android第一天-------环境搭建
  8. 个人开发者如何通过Android应用赚外快
  9. Android的开源隐忧:品牌稀释 代码分裂
  10. linux和windows平台下,如何下载android sd