Android播放在线音乐文件
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播放在线音乐文件的更多相关文章
- AVAudioPlayer播放在线音频文件
AVAudioPlayer播放在线音频文件 一:原里: AVAudioPlayer是不支持播放在线音频的,但是AVAudioPlayer有一个 initWithData的方法:我们可以把在线音频转换为 ...
- Android 播放在线视频
首先开启电脑上的tomcat,将视频文件放在Tomcat 7.0\webapps\ROOT中 不用修改代码,直接输入地址即可,运行如下: 播放在线视频,必须要求手机支持当前的格式,才可以播放 播放的原 ...
- 基于Android的在线播放器系统的设计与实现
文章结构: 1 引言 1.1系统的研究背景 现在的时代是互联网的时代,互联网高速发展的同时,无线网络也接入了互联网.社会的各个领域都已经被无线网络渗透.小的比如手机,电脑,电视.大的比如灯光系统,智能 ...
- Android 实现简单音乐播放器(一)
今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习 ...
- HTML5 Audio时代的MIDI音乐文件播放
大家都知道,HTML5 Audio标签能够支持wav, webm, mp3, ogg, acc等格式,但是有个很重要的音乐文件格式midi(扩展名mid)却在各大浏览器中都没有内置的支持,因为mid文 ...
- 高仿Android网易云音乐OkHttp+Retrofit+RxJava+Glide+MVC+MVVM
简介 这是一个使用Java(以后还会推出Kotlin版本)语言,从0开发一个Android平台,接近企业级的项目(我的云音乐),包含了基础内容,高级内容,项目封装,项目重构等知识:主要是使用系统功能, ...
- android播放器如何获取音乐文件信息
转http://blog.csdn.net/hellofeiya/article/details/8464356, android自带的音乐播放器中,在获取音乐文件信息的时候是通过扫描得到相关信息的. ...
- Android播放器推荐:可以播放本地音乐、视频、在线播放音乐、视频、网络收音机等
下载链接:http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTAxNTczfGMyNjNkMzFlfDEzNzY1MzkwNTR8 ...
- android 播放音乐媒体文件(一)
Audio formats and codecs Format / Codec Encoder Decoder Details Supported File Type(s) / Container F ...
随机推荐
- bzoj 4894: 天赋
Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有 一些天赋必须是要有前置天赋才能够学习得到的.也就是说,有一些天赋必须是要在 ...
- 【BZOJ2243】【SDOI2011】染色
题意见试题传送门 解题思路:显然是题树剖题. 考虑用线段树维护区间端点颜色与颜色数,这样就可以方便的合并,注意查询的时候对端点的特殊处理即可. 时间效率最高为\( O (m \log^{2} n) \ ...
- [bzoj4236]JOIOJI
来自FallDream的博客,未经允许,请勿转载,谢谢. JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJ ...
- bzoj3198[Sdoi2013]spring 容斥+hash
3198: [Sdoi2013]spring Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1143 Solved: 366[Submit][Sta ...
- Python Django系统
本节内容 路由系统,视图函数,模板引擎,ORM操作 FBV和CBV ORM操作补充 Cookie和Session Ajax入门 1. Django基本内容整理 1.1 路由系统 Django中路由系 ...
- Python中内置函数的介绍
内置函数的功能介绍 常用内置函数如下: 1.abs() 绝对值 格式:abs(x) 例如:print(abs(-18)) >>> 18 返回值:number #该函数主要用于数值类的 ...
- ubuntu 16.04 安装 tensorflow-gpu 包括 CUDA ,CUDNN,CONDA
ubuntu 16.04 安装 tensorflow-gpu 包括 CUDA ,CUDNN,CONDA 显卡驱动装好了,如图: 英文原文链接: https://github.com/williamFa ...
- Maven集成dubbo时报错 Missing artifact com.alibaba:dubbo:jar:2.8.4
1.下载dubbo,地址:https://github.com/dangdangdotcom/dubbox . 2.将下载的压缩包解压. 3.命令行进入下载路径,执行mvn install -Dmav ...
- Tomcat出现validateJarFile-jar not loaded问题
tomcat启动时问题: validateJarFile(...\WEB-INF\lib\servlet-api.jar)-jar not loaded. See Servlet Spec 2.3, ...
- idea+jsp+jstl c标签页面异常
先在Schema and DTDs配置C.tld文件 最后提示是少包 网上很多方法都说少jstl.jar 折腾了很久 其实还少standard.jar 以前的解决方法(看下面) 把这两个包分别加到项目 ...