android播放网络音乐

package little.music;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MusicActivity extends Activity {
	private Button m_playBtn, m_pauseBtn, m_restBtn, m_stopBtn;
	private MediaPlayer m_player;
	private boolean m_bIsReleased = false;
	private boolean m_bIsPaused = false;
	private boolean m_bIsStreaming = true;	 
	private String m_strFileURL = "http://www.cnjxol.com/ebook/01/DCB99531-B3FD-4E83-B8DB-22752A52CD9A.mp3";
	private String m_strTempFilePath = "";
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        m_playBtn = (Button) findViewById(R.id.playBtn);
        m_pauseBtn = (Button) findViewById(R.id.pauseBtn);
        m_restBtn = (Button) findViewById(R.id.resetBtn);
        m_stopBtn = (Button) findViewById(R.id.stopBtn);
        m_playBtn.setOnClickListener(new Button.OnClickListener()
        {

        	public void onClick(View v)
        	{
        		Play(m_strFileURL);
        		LogI("MediaPlayer start playing");
        	}
     	});
        m_pauseBtn.setOnClickListener(new Button.OnClickListener()
        {
        	public void onClick(View v)
        	{
        		if (m_player != null)
        		{
        			if (!m_bIsReleased)
        			{
        				if (!m_bIsPaused)
        				{
        					m_player.pause();
        					m_bIsPaused = true;
        				}
        				else
        				{
        					m_player.start();
        					m_bIsPaused = false;
        				}
        			}
        		}
        	}
        });       
        m_restBtn.setOnClickListener(new Button.OnClickListener()
        {
        	public void onClick(View v)
        	{
        		if (m_player != null)
        		{
        			if (!m_bIsReleased)
        			{
        				m_player.seekTo(0);
        				LogI("MediaPlayer reset");
        			}
        		}
        	}
        });
        m_stopBtn.setOnClickListener(new Button.OnClickListener()
        {
        	public void onClick(View v)
        	{
        		if (m_player != null)
        		{
        			if (!m_bIsReleased)
        			{
        				m_player.seekTo(0);
        				m_player.pause();
        				LogI("MediaPlayer stop");
        			}
        		}
        	}
        });
    }
    
    private void Play(final String strURL)
    {
    	if (m_player != null)
    	{
    		m_player.start();
    		return;
    	}
    	m_player = new MediaPlayer();
    	m_player.setAudioStreamType(AudioManager.STREAM_MUSIC);

        // 监听错误事件

        m_player.setOnErrorListener(new MediaPlayer.OnErrorListener()
        {
        	public boolean onError(MediaPlayer mp, int what, int extra)
        	{
        		LogI("Error on Listener, what: " + what + "extra: " + extra);
        		return false;
        	}
        });

        // 监听缓冲事件

        m_player.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener()
        {
        	public void onBufferingUpdate(MediaPlayer mp, int percent)
        	{
        		LogI("MediaPlayer Update buffer: " + Integer.toString(percent) + "%");
        	}
        });

        // 监听播放完毕事件

        m_player.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
        {
        	public void onCompletion(MediaPlayer mp)
        	{
        		LogI("MediaPlayer Listener Completed");
        	}
        });

        // 监听准备事件

        m_player.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
        {        
        	public void onPrepared(MediaPlayer mp)
        	{
        		LogI("MediaPlayer Prepared Listener");
        	}
        });
        Runnable r = new Runnable()
        {
        	public void run()
        	{
        		try
        		{
        			if (m_bIsStreaming)
        			{
        				m_player.setDataSource(MusicActivity.this,
        						Uri.parse(m_strFileURL));
        			}
        			else
        			{
        				SetDataSource(strURL);
        			}
        			m_player.prepare();
        			LogI("Duration: " + m_player.getDuration());
        			m_player.start();
        			m_bIsReleased = false;
        		}
        		catch (Exception e)
        		{
        			LogE(e.getMessage(), e);
        		}
        	}
        };
        new Thread(r).start();
     }
    
    private void SetDataSource(String strURL) throws Exception
    {
    	if (!m_bIsReleased)
       {
    		URL url = new URL(strURL);
    		URLConnection conn = url.openConnection();
    		InputStream in = conn.getInputStream();
    		if (in == null)
    			throw new RuntimeException("stream is null");
    		File file = File.createTempFile("player_mp3_cache", ".mp3",
    				MusicActivity.this.getCacheDir());
    		if (!file.exists())
    			file.createNewFile();
    		m_strTempFilePath = file.getAbsolutePath();
    		FileOutputStream fos = new FileOutputStream(file);
    		byte buffer[] = new byte[128];
    		do
    		{
    			int nNumRead = in.read(buffer);
    			if (nNumRead <= 0)
    				break;
    			fos.write(buffer);
    		}
    		while (true);
    		m_player.setDataSource(m_strTempFilePath);
    		in.close();
    		fos.close();
    	}
    }
    private void DeleteFile(String strPath)
    {
    	File file = new File(strPath);
        if (file.exists())
        file.delete();
    }
    private void LogI(String str)
    {
    	Log.i("Play_Web_Mp3", str);
    }
    private void LogE(String str, Throwable tr)
    {
    	Log.e("Play_Web_Mp3", str, tr);
    }
    
    protected void onPause()
    {

        // 删除临时文件
        DeleteFile(m_strTempFilePath);
        super.onPause();
     }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值