Android播放在线音乐文件
16lz
2021-01-23
Android播放在线音频文件
效果图:
源码下载地址:
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中简单的音乐播放器
- Android单元测试-javaeye
- android实现调用系统音乐播放器
- 移动应用测试框架—Calabash Android 简介
- Android JUnit单元测试
- android-单元测试(Android JUnit Test)
- Tiny210(Android)串口收发测试通过
- 搭建android测试环境