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

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

代码如下:

布局文件:

 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns: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. import android.os.Bundle; 
  2. import android.app.Activity; 
  3. import android.view.View; 
  4. import android.view.View.OnClickListener; 
  5. import android.widget.Button; 
  6. import android.widget.SeekBar; 
  7.  
  8. public class MainActivity extends Activity implements OnClickListener { 
  9.  
  10.     private Button btnPlayUrl; 
  11.     private SeekBar skbProgress; 
  12.     private Player player; 
  13.     int progress; 
  14.  
  15.     @Override 
  16.     public void onCreate(Bundle savedInstanceState) { 
  17.         super.onCreate(savedInstanceState); 
  18.         setContentView(R.layout.activity_main); 
  19.         btnPlayUrl = (Button) this.findViewById(R.id.btnPlayUrl); 
  20.         btnPlayUrl.setOnClickListener(this); 
  21.         skbProgress = (SeekBar) this.findViewById(R.id.skbProgress); 
  22.         skbProgress.setOnSeekBarChangeListener(new SeekBarChangeEvent()); 
  23.         player = new Player(skbProgress); 
  24.  
  25.     } 
  26.  
  27.     @Override 
  28.     public void onClick(View v) { 
  29.         int id = v.getId(); 
  30.         switch (id) { 
  31.         case R.id.btnPlayUrl: 
  32.             //网络音频地址 
  33.             String url = "http://www........aaa.amr"
  34.             player.playUrl(url); 
  35.             break
  36.         default
  37.             break
  38.         } 
  39.     } 
  40.  
  41.     class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener { 
  42.  
  43.         @Override 
  44.         public void onProgressChanged(SeekBar seekBar, int progress, 
  45.                 boolean fromUser) { 
  46.             MainActivity.this.progress = progress 
  47.                     * player.mediaPlayer.getDuration() / seekBar.getMax(); 
  48.         } 
  49.  
  50.         @Override 
  51.         public void onStartTrackingTouch(SeekBar seekBar) { 
  52.         } 
  53.  
  54.         @Override 
  55.         public void onStopTrackingTouch(SeekBar seekBar) { 
  56.             player.mediaPlayer.seekTo(progress); 
  57.         } 
  58.     } 
  59.  

播放器

 

  1. import java.io.IOException; 
  2. import java.util.Timer; 
  3. import java.util.TimerTask; 
  4. import android.media.AudioManager; 
  5. import android.media.MediaPlayer; 
  6. import android.os.Handler; 
  7. import android.os.Message; 
  8. import android.util.Log; 
  9. import android.widget.SeekBar; 
  10.  
  11. public class Player implements MediaPlayer.OnPreparedListener{ 
  12.     public MediaPlayer mediaPlayer; 
  13.     private SeekBar skbProgress; 
  14.     private Timer mTimer=new Timer(); 
  15.     public Player(SeekBar skbProgress)  
  16.     { 
  17.         this.skbProgress=skbProgress; 
  18.         try { 
  19.             mediaPlayer = new MediaPlayer(); 
  20.             mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
  21.             mediaPlayer.setOnPreparedListener(this); 
  22.         } catch (Exception e) { 
  23.             Log.e("mediaPlayer""error", e); 
  24.         } 
  25.         mTimer.schedule(mTimerTask, 010); 
  26.     } 
  27.      
  28.     TimerTask mTimerTask = new TimerTask() { 
  29.         @Override 
  30.         public void run() { 
  31.             if(mediaPlayer==null
  32.                 return
  33.             if(mediaPlayer!=null){ 
  34.                 if (mediaPlayer.isPlaying() && skbProgress.isPressed() == false) { 
  35.                     handleProgress.sendEmptyMessage(0); 
  36.                 } 
  37.             } 
  38.         } 
  39.     }; 
  40.      
  41.     Handler handleProgress = new Handler() { 
  42.         public void handleMessage(Message msg) { 
  43.             if(mediaPlayer==null){ 
  44.                 return
  45.             } 
  46.             int position = mediaPlayer.getCurrentPosition(); 
  47.             int duration = mediaPlayer.getDuration(); 
  48.             if (duration > 0) { 
  49.                 long pos = skbProgress.getMax() * position / duration; 
  50.                 skbProgress.setProgress((int) pos); 
  51.             } 
  52.         }; 
  53.     }; 
  54.  
  55.      
  56.     public void playUrl(String videoUrl) 
  57.     { 
  58.         try { 
  59.             mediaPlayer.reset(); 
  60.             mediaPlayer.setDataSource(videoUrl); 
  61.             mediaPlayer.prepareAsync(); 
  62.         } catch (IllegalArgumentException e) { 
  63.             e.printStackTrace(); 
  64.         } catch (IllegalStateException e) { 
  65.             e.printStackTrace(); 
  66.         } catch (IOException e) { 
  67.             e.printStackTrace(); 
  68.         } 
  69.     } 
  70.  
  71.     @Override 
  72.     public void onPrepared(MediaPlayer arg0) { 
  73.         arg0.start(); 
  74.         Log.e("mediaPlayer""onPrepared"); 
  75.     } 

实现图片:

 

android实现在线播放流媒体_android