安卓开发,实现简单音乐播放器

Android平台多媒体框架核心使用的是OpenCORE多媒体框架,在安卓系统中所有涉及音频视频的录制。解码。播放都是通过它来实现的。Android系统音频视频以及流媒体类型数据的播放有MediaPlayer类来完成。

下面进行一个实例来演示MediaPlayer的使用:

具体实现效果如下:

其中选项1,2,3分别是三种不同的音频加载方式:

方式1是内部加载,音频文件存放在/res/raw文件夹中,

方式2是本地加载,音频文件存放在本地SD卡中,

方式三为网络加载,音频文件从网络中获取。

xml文件代码如下:

<RelativeLayout 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"

tools:context=".MainActivity" >

<TextView

android:id="@+id/text1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="请选择:" />

<RadioGroup

android:id="@+id/radiogroup"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/text1"

android:layout_marginTop="30dp">

<RadioButton

android:id="@+id/radio1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="选项1"/>

<RadioButton

android:id="@+id/radio2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="选项2"/>

<RadioButton

android:id="@+id/radio3"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="选项3"/>

</RadioGroup>

<TextView

android:id="@+id/text2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_below="@+id/radiogroup"

android:layout_marginTop="52dp"

android:text="你的选择是:" />

<SeekBar

android:id="@+id/seekbar"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_below="@+id/text2"

android:layout_marginTop="16dp" />

<Button

android:id="@+id/stop"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_alignParentRight="true"

android:layout_marginBottom="84dp"

android:text="停止" />

<Button

android:id="@+id/pause"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBaseline="@+id/stop"

android:layout_alignBottom="@+id/stop"

android:layout_centerHorizontal="true"

android:text="暂停" />

<Button

android:id="@+id/play"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBaseline="@+id/pause"

android:layout_alignBottom="@+id/pause"

android:layout_alignParentLeft="true"

android:text="开始" />

</RelativeLayout>

MainActivity代码如下:

public class MainActivity extends Activity implements OnSeekBarChangeListener{

private static final String music_name="music.mp3";

private static final String music_path="/res/raw/";

private static final String music_sdpath="/sdcard/huawei/";

private static final String music_network_url="http://sc1.111ttt.com/2015/5/11/05/104050035435.mp3";

private String music_play_path="";

private SeekBar seekbar=null;

private RadioGroup radiogroup;

private boolean progressflag=false;

private MediaPlayer mediaplayer;

private Timer timer;

private TimerTask timertask;

private Button button1,button2,button3;

private TextView text_path;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

music_component();

mediaplayer=new MediaPlayer();

button_handler();

seekbar.setOnSeekBarChangeListener(this);

//注册进度改变事件监听器

}

public void onProgressChanged(SeekBar seekbar, int arg1, boolean arg2) {

// TODO Auto-generated method stub

}

public void onStartTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

progressflag=true;

}

public void onStopTrackingTouch(SeekBar arg0) {

// TODO Auto-generated method stub

mediaplayer.seekTo(seekbar.getProgress());

progressflag=false;

}

protected void onDestroy(){

if(mediaplayer!=null){

mediaplayer.release();

timer.cancel();

timertask.cancel();

}

super.onDestroy();

}

private void music_component(){

radiogroup=(RadioGroup)findViewById(R.id.radiogroup);

seekbar=(SeekBar)findViewById(R.id.seekbar);

button1=(Button)findViewById(R.id.play);

button2=(Button)findViewById(R.id.pause);

button3=(Button)findViewById(R.id.stop);

text_path=(TextView)findViewById(R.id.text2);

}

private void button_handler(){

radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

public void onCheckedChanged(RadioGroup arg0, int arg1) {

// TODO Auto-generated method stub

if(mediaplayer!=null){

mediaplayer.reset();

}

}

});

button1.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {

// TODO Auto-generated method stub

playmusic();

}

});

button2.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {

// TODO Auto-generated method stub

pausemusic();

}

});

button3.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {

// TODO Auto-generated method stub

stopmusic();

}

});

}

protected void stopmusic() {

// TODO Auto-generated method stub

if(mediaplayer!=null&&mediaplayer.isPlaying()){

mediaplayer.reset();

Toast.makeText(MainActivity.this, "播放结束.", Toast.LENGTH_SHORT).show();

timer.cancel();

timertask.cancel();

}

}

protected void pausemusic() {

// TODO Auto-generated method stub

if(mediaplayer!=null&&mediaplayer.isPlaying()){

Toast.makeText(MainActivity.this, "播放暂停.", Toast.LENGTH_SHORT).show();

mediaplayer.pause();

}else{

mediaplayer.start();

Toast.makeText(MainActivity.this, "继续播放.", Toast.LENGTH_SHORT).show();

}

}

private void playmusic() {

// TODO Auto-generated method stub

mediaplayer.reset();

switch (radiogroup.getCheckedRadioButtonId()) {

case R.id.radio1:

music_play_path="音乐来自于:"+music_path+music_name;

text_path.setText(music_play_path);

mediaplayer=mediaplayer.create(MainActivity.this, R.raw.music);

doPlayMusic(music_path+music_name,true);

break;

case R.id.radio2:

music_play_path="音乐来自于:"+music_sdpath+music_name;

text_path.setText(music_play_path);

doPlayMusic(music_sdpath+music_name,false);

break;

case R.id.radio3:

music_play_path="音乐来自于:"+"网络:"+music_network_url;

text_path.setText(music_play_path);

doPlayMusic(music_network_url,false);

break;

default:

break;

}

}

private void doPlayMusic(String musicpath,boolean is_res_way) {

// mp3路径和是否为内部资源加载方式,如果不是,就用setDataSource()方法

try {

if(!is_res_way){

mediaplayer.setDataSource(musicpath);

mediaplayer.prepare();

}

seekbar.setMax(mediaplayer.getDuration());

//设置进度条最大值

timer=new Timer();

timertask=new TimerTask() {

@Override

public void run() {

// TODO Auto-generated method stub

if(progressflag=true)

seekbar.setProgress(mediaplayer.getCurrentPosition());

//设置进度条为当前播放进度

}

};

timer.schedule(timertask,0,10);

//用计时器记录播放进度

mediaplayer.start();

mediaplayer.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer arg0) {

// TODO Auto-generated method stub

Toast.makeText(MainActivity.this, "播放完成.", Toast.LENGTH_SHORT).show();

timer.cancel();

timertask.cancel();

seekbar.setProgress(0);

mediaplayer.reset();

}

});

//注册播放完成事件监听器

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

以上代码为实例源码,可以直接用,音乐文件的名字是"music.mp3"。

时间: 2024-10-22 22:20:39

安卓开发,实现简单音乐播放器的相关文章

Android开发---MediaPlayer简单音乐播放器

Android开发-MediaPlayer简单音乐播放器 功能介绍 实现一个简单的播放器,类似网易云音乐形式,功能包括: 播放.暂停,停止,退出功能: 后台播放功能: 进度条显示播放进度.拖动进度条改变进度功能: 播放时图片旋转,显示当前播放时间功能: 界面样式 功能实现 1. MediaPlayer的实现 MediaPlayer常用方法介绍 MediaPlayer的实现包括初始化MediaPlayer,MediaPlayer的功能实现,包括播放.暂停.停止.离开等,具体细节如下: MediaP

Android 实现简单音乐播放器(一)

今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习之路上的一个小小里程碑,给我增加了很多信心(~~真容易获得满足~~).从下面开始,我将详细介绍MusicPlayer的设计过程. 首先,先看一下这个项目的工程目录和运行效果:      从上面的图片看到,整个工程的布局文件有两个:activity_main.xml和musiclist.xml,其中,

Android——简单音乐播放器

使用MediaPlayer做的简单音乐播放器,更多内容请到百度经验查看   http://jingyan.baidu.com/article/60ccbceb63452364cab197f1.html <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:l

Android 实现简单音乐播放器(二)

在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我将解析MusicPlayer的功能实现,就讲一些主要的点和有趣的细节,结合MainActivity.java代码进行说明(写出来可能有点碎……一向不太会总结^·^). 一.功能菜单 在MusicPlayer中,我添加了三个菜单: search(搜索手机中的音乐文件,更新播放列表). clear(清除播放列表……这个功能是最初加进去的,后来改进之后,已经没什么实际意义). exit(退出). menu

Android开发实战之简单音乐播放器

最近开始学习音频相关.所以,很想自己做一个音乐播放器,于是,花了一天学习,将播放器的基本功能实现了出来.我觉得学习知识点还是蛮多的,所以写篇博客总结一下关于一个音乐播放器实现的逻辑.希望这篇博文对你的学习和生活有所帮助.效果图: **实现逻辑** 在市面上的音乐播放app,即时你关了.那么一样会在后台播放,所以播放的逻辑应该写在Service中.并且能够实现Service和Activity之间进行通信.那么Service是四大组件之一,所以在使用的时候一定不要忘了在配置文件中声明一下. <ser

Android开发6:Service的使用(简单音乐播放器的实现)

前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service 进行后台工作, 学会使用 Service 与 Activity 进行通信,并在此知识基础上学会使用 MediaPlayer和简单的多线程编程.使用 Handle 更新 UI,并设计成功一个简单的音乐播放器. 是不是很高大上呢~一起来学习~ 基础知识 Service作为Android四大组件之一,在每

iOS 简单音乐播放器 界面搭建

如图搭建一个音乐播放器界面,具备以下几个简单功能: 1,界面协调,整洁. 2,点击播放,控制进度条. 3.三收藏歌曲,点击收藏,心形收藏标志颜色加深. 4,左右按钮,切换歌曲图片和标题. 5,点击中间图片,隐藏所有按钮,仅显示蓝色背景. 设计的整体思路: 1.在搭建界面的时候,为了整洁和方便后续的功能的添加,需要将整个的界面划分为几个部分: ①:最上面的一行包括:一个返回按钮.一个歌曲名称.一个收藏按钮: ②:第二行:一个slider控件.两侧是当前的歌曲播放进度和歌曲的总时长--两个lable

C#简单音乐播放器ListBox歌单列表

简单的音乐播放器实现其实并不难,直接用axWindowsmediaplayer来做,这里没有什么技术含量的,但是axWindowsmediaplayer是不会生成歌单列表的,也就是说,在每次添加音乐后axWindowsmediaplayer是没有记录的,那么我就来简单的做下歌单列表. axWindowsmediaplayer的工作原理其实就是根据Path来加载的,在写歌单时我们需要先来做两件事,1.存储歌曲Path 2.存储歌曲名字 这里暂且不考虑数据库,我使用IO操作通过txt文件来存储这两种

ios开发:一个音乐播放器的设计与实现

github地址:https://github.com/wzpziyi1/MusicPlauer 这个medo,关于歌曲播放的主要功能都实现了的.下一曲.上一曲,暂停,根据歌曲的播放进度动态滚动歌词,将当前正在播放的歌词放大显示,拖动进度条,歌曲跟着变化,并且使用Time Profiler进行了优化,还使用XCTest对几个主要的类进行了单元测试. 已经经过真机调试,在真机上可以后台播放音乐,并且锁屏时,显示一些主要的歌曲信息. 首页: 歌曲内部播放: 当拖动小的进度条的时候,歌曲也会随之变化.

记一次酷狗音乐API的获取,感兴趣的可以自己封装开发自己的音乐播放器

1.本教程仅供个人学习用,禁止用于任何的商业和非法用途,如涉及版权问题请联系笔者删除. 2.随笔系作者原创文档,转载请注明文档来源:http://www.cnblogs.com/apresunday/p/8448126.html,谢谢 小八这几天正在学习微信小程序的开发,于是想在学的同时能开发出来一个关于音乐的项目,但是问题在于音乐这东西.一方面是数据量太大,第二个方面就是牵扯到很多的版权的问题,所以笔者就想着借助于目前市面上的音乐播放器上的音乐文件,鉴于酷狗音乐上边的歌多而且比较的全面,在此就