Android播放在线音乐文件
来源:互联网 发布:九九乘法表c语言数组 编辑:程序博客网 时间:2024/05/16 12:30
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
测试效果如下(测试之前先添加音乐场景):
0 0
- Android播放在线音乐文件
- Android 在线音乐播放器
- Android实例:多线程文件下载+在线音乐播放+清除下载文件
- Android MediaPlayer在线音乐播放器
- Android MediaPlayer在线音乐播放器
- android之在线音乐播放器
- 一款开源Android在线音乐播放器
- jamendo_android 一个开源的Android在线音乐播放器实例
- jamendo_android 一个开源的Android在线音乐播放器实例
- Android 数据抓取——在线音乐播放器的实现
- 简析Android mediaPlayer 播放在线音乐网络异常状态的处理
- symbian在线音乐播放器
- 在线音乐播放器
- Jamendo在线音乐播放器
- 在线音乐播放器单例
- 在线音乐视频播放器
- ubuntu在线音乐播放器
- ubuntu在线音乐播放器推荐
- 视频压缩:I帧、P帧、B帧
- aauto学习系列之<1>
- RPC和WebService等相关远程通信概念理解
- 我的openwrt学习笔记(六):MTK的OpenWrt系统编译以及下载
- 在输入的字符串中判断是否有a,多种方法(比较前两种不同的表示方法)
- Android播放在线音乐文件
- 【Linux】常用命令及参数
- Android Material Design之Toolbar与Palette实践
- FFMPEG timestamp conception and Unit Conversion
- BAT批处理文件语法
- hdu 5400 等差数列
- HDU 1421
- UICollectionView介绍
- nginx限制每个ip访问的频率和并发量