Android播放在线音频文件

效果图:

Android播放在线音乐文件_第1张图片

源码下载地址:

http://download.csdn.net/detail/q4878802/9020687

添加网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

工具类

package com.example.onlinemusicplayer;import java.io.IOException;import java.util.Timer;import java.util.TimerTask;import android.annotation.SuppressLint;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnBufferingUpdateListener;import android.media.MediaPlayer.OnCompletionListener;import android.media.MediaPlayer.OnPreparedListener;import android.os.Handler;import android.util.Log;import android.widget.SeekBar;public class Player implements OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener {    public MediaPlayer mediaPlayer; // 媒体播放器    private SeekBar seekBar; // 拖动条    private Timer mTimer = new Timer(); // 计时器    // 初始化播放器    public Player(SeekBar seekBar) {        super();        this.seekBar = seekBar;        try {            mediaPlayer = new MediaPlayer();            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);// 设置媒体流类型            mediaPlayer.setOnBufferingUpdateListener(this);            mediaPlayer.setOnPreparedListener(this);        } catch (Exception e) {            e.printStackTrace();        }        // 每一秒触发一次        mTimer.schedule(timerTask, 0, 1000);    }    // 计时器    TimerTask timerTask = new TimerTask() {        @Override        public void run() {            if (mediaPlayer == null)                return;            if (mediaPlayer.isPlaying() && seekBar.isPressed() == false) {                handler.sendEmptyMessage(0); // 发送消息            }        }    };    @SuppressLint("HandlerLeak")    Handler handler = new Handler() {        public void handleMessage(android.os.Message msg) {            int position = mediaPlayer.getCurrentPosition();            int duration = mediaPlayer.getDuration();            if (duration > 0) {                // 计算进度(获取进度条最大刻度*当前音乐播放位置 / 当前音乐时长)                long pos = seekBar.getMax() * position / duration;                seekBar.setProgress((int) pos);            }        };    };    public void play() {        mediaPlayer.start();    }    /** * * @param url * url地址 */    public void playUrl(String url) {        try {            mediaPlayer.reset();            mediaPlayer.setDataSource(url); // 设置数据源            mediaPlayer.prepare(); // prepare自动播放        } catch (IllegalArgumentException e) {            e.printStackTrace();        } catch (SecurityException e) {            e.printStackTrace();        } catch (IllegalStateException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    // 暂停    public void pause() {        mediaPlayer.pause();    }    // 停止    public void stop() {        if (mediaPlayer != null) {            mediaPlayer.stop();            mediaPlayer.release();            mediaPlayer = null;        }    }    // 播放准备    @Override    public void onPrepared(MediaPlayer mp) {        mp.start();        Log.e("mediaPlayer", "onPrepared");    }    // 播放完成    @Override    public void onCompletion(MediaPlayer mp) {        Log.e("mediaPlayer", "onCompletion");    }    /** * 缓冲更新 */    @Override    public void onBufferingUpdate(MediaPlayer mp, int percent) {        seekBar.setSecondaryProgress(percent);        int currentProgress = seekBar.getMax() * mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration();        Log.e(currentProgress + "% play", percent + " buffer");    }}

测试类

package com.example.onlinemusicplayer;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.SeekBar;public class MainActivity extends Activity {    private SeekBar mSeekBar;    private String path = "http://file.kuyinyun.com/group1/M00/90/B7/rBBGdFPXJNeAM-nhABeMElAM6bY151.mp3";    private Player mPlayer;    private EditText mEditText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mSeekBar = (SeekBar) findViewById(R.id.seekBar);        mEditText = (EditText) findViewById(R.id.editText);        mEditText.setText(path);        mPlayer = new Player(mSeekBar);    }    /** * 播放 * * @param view */    public void play(View view) {        new Thread(new Runnable() {            @Override            public void run() {                mPlayer.playUrl(mEditText.getText().toString().trim());            }        }).start();    }}

页面布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >    <TextView  android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="在线音乐播放器" />    <EditText  android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="在线音乐路径" />    <SeekBar  android:id="@+id/seekBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" />    <Button  android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:onClick="play" android:text="开始播放" /></LinearLayout>

附加

音频文件我之前是用的科大讯飞语义的音乐场景测试的,科大讯飞的语义场景是基于“酷音云”做的,“酷音云”提供了在线的mp3格式的彩铃音乐(版权问题,只能是这种形式)文件。

测试地址:

http://osp.voicecloud.cn/index.php/default/quicktest/index

测试效果如下(测试之前先添加音乐场景)

Android播放在线音乐文件_第2张图片

更多相关文章

  1. Android中简单的音乐播放器
  2. Android单元测试-javaeye
  3. android实现调用系统音乐播放器
  4. 移动应用测试框架—Calabash Android 简介
  5. Android JUnit单元测试
  6. android-单元测试(Android JUnit Test)
  7. Tiny210(Android)串口收发测试通过
  8. 搭建android测试环境

随机推荐

  1. Android是什么 之三-------手机之硬件形
  2. Android(安卓)Studio怎样提示函数使用方
  3. Managing Your App's Memory 翻译
  4. 曝Android机冷冻后变"傻" 加密数据随意访
  5. Android屏幕横竖屏切换和生命周期管理的
  6. findlibrary returned null产生的联想,And
  7. [置顶] Android(安卓)自定义View实现竖直
  8. Android项目开发,不能不了解的第三方库!(齐
  9. android实现观察者模式的几种方法
  10. Android的内存机制和常见泄漏情形