当前位置:首页 > 代码 > 正文

android简单音乐播放器代码(android本地音乐播放器代码)

admin 发布:2022-12-19 19:19 180


今天给各位分享android简单音乐播放器代码的知识,其中也会对android本地音乐播放器代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

基于Android音乐播放器源代码(正常播放、有列表)

package my.android.players;

import java.io.File;

import java.io.FilenameFilter;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageButton;

import android.widget.TextView;

public class mainActivity extends Activity {

private ListString myMusicList=new ArrayListString();

//当前播放歌曲的索引

private int currentListItem=0;

//音乐的路径

private static final String MUSIC_PATH="/sdcard/mp3";

//播放对象

private MediaPlayer myMediaPlayer;

private TextView m_TextView;

//播放按钮

private ImageButton m_start;

private ImageButton m_stop;

private ImageButton m_next;

private ImageButton m_last;

/*设定bIsPaused一开始为false */

private boolean bIsRun = false;

private boolean isplay;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.main2);

myMediaPlayer=new MediaPlayer();

musicList();

m_TextView=(TextView)findViewById(R.id.mtextview);

m_start=(ImageButton)findViewById(R.id.imgbtn_start);

m_stop=(ImageButton)findViewById(R.id.imgbtn_stop);

m_next=(ImageButton)findViewById(R.id.imgbtn_next);

m_last=(ImageButton)findViewById(R.id.imgbtn_last);

listener();

Intent intent = this.getIntent();

Bundle bundle = intent.getExtras();

currentListItem = bundle.getInt("currentListItem");

isplay=bundle.getBoolean("isplay");

if(isplay==true)

{

bIsRun=false;

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));

}

}

//监听事件

void listener(){

//开始

m_start.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

try

{

if(myMediaPlayer.isPlaying()==true)

{

myMediaPlayer.pause();

m_start.setImageResource(R.drawable.pause);

}

else

{

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));

}

}

catch (IllegalStateException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

//下一首

m_next.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

nextMusic();

}

});

//上一首

m_last.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

lastMusic();

}

});

//停止

m_stop.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

stopMusic();

}

});

myMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override

public void onCompletion(MediaPlayer mp) {

// TODO Auto-generated method stub

nextMusic();

}

});

}

//播放音乐

void playMusic(String path){

try {

if(bIsRun==false)

{

myMediaPlayer.reset();

myMediaPlayer.setDataSource(path);

myMediaPlayer.prepare();

myMediaPlayer.start();

/*

* 取出歌曲名的.mp3后缀

* */

String str=(myMusicList.get(currentListItem)).toString();

System.out.println(str);

String str1[]=str.split("\\.");

System.out.println(str1[0]);

m_TextView.setText(str1[0]);

}

else

{

myMediaPlayer.start();

}

m_start.setImageResource(R.drawable.start);

bIsRun=true;

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

//下一首

void nextMusic(){

if(++currentListItem=myMusicList.size()){

currentListItem=0;

}

bIsRun=false;

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));

}

//上一首

void lastMusic(){

if(--currentListItem0)

currentListItem=myMusicList.size()-1;

bIsRun=false;

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));

}

//停止

void stopMusic() {

if (myMediaPlayer.isPlaying()) {

m_start.setImageResource(R.drawable.pause);

myMediaPlayer.stop();// 停止

bIsRun=false;

}

else

playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));

}

//当用户返回时结束音乐并释放音乐对象

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

if(keyCode==KeyEvent.KEYCODE_BACK){

new AlertDialog.Builder(mainActivity.this).setTitle("message")

.setIcon(android.R.drawable.dialog_frame)

.setMessage("你确定要离开吗?")

.setPositiveButton("确定",new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

myMediaPlayer.stop();

myMediaPlayer.release();

finish();

}

}).setNegativeButton("取消",new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

}

}).show();

}

return super.onKeyDown(keyCode, event);

}

/**

* 文件过滤器

*

* @author

*

*/

class MusicFilter implements FilenameFilter {

@Override

public boolean accept(File dir, String filename) {

return (filename.endsWith(".mp3"));

}

}

//绑定音乐

void musicList(){

try{

File home=new File(MUSIC_PATH);

if(!home.exists())

home.mkdirs();

if(home.listFiles(new MusicFilter()).length=0){

for(File file:home.listFiles(new MusicFilter())){

myMusicList.add(file.getName().toString());

}

}

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

}

package my.android.players;

import java.io.File;

import java.io.FilenameFilter;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.ListView;

public class Activity01 extends Activity {

//播放列表

private ListString myMusicList=new ArrayListString();

//当前播放歌曲的索引

private int currentListItem;

//音乐的路径

private static final String MUSIC_PATH="/sdcard/mp3";

//播放列表

private ListView m_ListView;

private boolean isplay=true;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

m_ListView=(ListView)findViewById(R.id.lv_music);

musicList();

//当选择列表项时播放音乐

m_ListView.setOnItemClickListener(new ListView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView? arg0, View arg1, int arg2,

long arg3) {

currentListItem = arg2;

Intent intent = new Intent();

Bundle mBundle=new Bundle();

mBundle.putInt("currentListItem", currentListItem);

mBundle.putBoolean("isplay", isplay);

intent.putExtras(mBundle);

intent.setClass(Activity01.this,mainActivity.class);

startActivity(intent);

finish();

}

});

}

/**

* 文件过滤器

*

* @author

*

*/

class MusicFilter implements FilenameFilter {

@Override

public boolean accept(File dir, String filename) {

return (filename.endsWith(".mp3"));

}

}

//绑定音乐

void musicList(){

try{

File home=new File(MUSIC_PATH);

if(!home.exists())

home.mkdirs();

if(home.listFiles(new MusicFilter()).length=0){

for(File file:home.listFiles(new MusicFilter())){

myMusicList.add(file.getName().toString());

}

ArrayAdapterString musicList=new ArrayAdapterString

(Activity01.this,android.R.layout.simple_list_item_1, myMusicList);

m_ListView.setAdapter(musicList);

}

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

}

android在线本地音乐播放器 简单点能看懂的 谁有源码给一个啊

下面这个例子是使用service和broadcastReceiver实现的简单音乐播放器,麻雀虽小,五脏俱全,百度搜索安卓无忧,点击源码看源码,你看演示:

MusiceService代码

package mm.shandong.com.testsimplemedia.service;  

import android.app.Service;  

import android.content.BroadcastReceiver;  

import android.content.Context;  

import android.content.Intent;  

import android.content.IntentFilter;  

import android.content.res.AssetFileDescriptor;  

import android.content.res.AssetManager;  

import android.media.MediaPlayer;  

import android.os.IBinder;  

  

public class MusicService extends Service {  

  

    int currentMusic = 0;//0表示没有音乐播放,1表示暂停,2表示正在播放,  

    int status;  

    MediaPlayer mp;  

    String[] musics = new String[]{"first.mp3", "second.mp3", "third.mp3"};  

    AssetManager am;  

  

    public MusicService() {  

  

    }  

  

    @Override  

    public void onCreate() {  

        am = getAssets();  

        mp = new MediaPlayer();  

  

        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {  

            @Override  

            public void onCompletion(MediaPlayer mediaPlayer) {  

                currentMusic++;  

                currentMusic = currentMusic % musics.length;  

                playMusic();  

                status = 2;  

                Intent intentTemp = new Intent("Update_Music_State");  

                intentTemp.putExtra("status", status);  

                intentTemp.putExtra("currentMusic", currentMusic);  

                sendBroadcast(intentTemp);  

  

            }  

        });  

        IntentFilter intentFilter = new IntentFilter();  

        intentFilter.addAction("Get_Music_Control");  

        ///动态注册播放器变化的广播接收者  

        MusicServiceReceiver musicServiceReceiver = new MusicServiceReceiver();  

        registerReceiver(musicServiceReceiver, intentFilter);  

        super.onCreate();  

  

    }  

  

    public class MusicServiceReceiver extends BroadcastReceiver {  

  

        @Override  

        public void onReceive(Context context, Intent intent) {  

            int control = intent.getIntExtra("control", 0);  

            switch (control) {  

                case 0:  

                    //暂停  

                    if (status == 2) {  

                        mp.pause();  

                        status = 1;  

                    }  

  

                    break;  

                case 1:  

                    ///播放  

                    if (status == 0) {  

                        playMusic();  

                        status = 2;  

                    } else if (status == 1) {  

                        mp.start();  

                        status = 2;  

                    }  

                    break;  

                case 3:  

                    break;  

                case 4:  

                    //上一首  

                    if (status == 0) {  

                        if (currentMusic == 0) {  

                            currentMusic = 2;  

                        } else {  

                            currentMusic--;  

                        }  

                    } else if (status == 1) {  

                        if (currentMusic == 0) {  

                            currentMusic = 2;  

                        } else {  

                            currentMusic--;  

                        }  

                        status = 0;  

  

                    } else if (status == 2) {  

                        if (currentMusic == 0) {  

                            currentMusic = 2;  

                        } else {  

                            currentMusic--;  

                        }  

                        playMusic();  

                    }  

                    break;  

                case 5:  

                    //下一首  

                    if (status == 0) {  

                        if (currentMusic == 2) {  

                            currentMusic = 0;  

                        } else {  

                            currentMusic++;  

                        }  

                    } else if (status == 1) {  

                        if (currentMusic == 2) {  

                            currentMusic = 0;  

                        } else {  

                            currentMusic++;  

                        }  

                        status = 0;  

  

                    } else if (status == 2) {  

                        if (currentMusic == 2) {  

                            currentMusic = 0;  

                        } else {  

                            currentMusic++;  

                        }  

                        playMusic();  

                    }  

  

                    break;  

            }  

            Intent intentTemp = new Intent("Update_Music_State");  

            intentTemp.putExtra("status", status);  

            intentTemp.putExtra("currentMusic", currentMusic);  

            sendBroadcast(intentTemp);  

  

        }  

    }  

  

    @Override  

    public IBinder onBind(Intent intent) {  

        // TODO: Return the communication channel to the service.  

        throw new UnsupportedOperationException("Not yet implemented");  

    }  

  

    public void playMusic() {  

        try {  

  

            AssetFileDescriptor ad = am.openFd(musics[currentMusic]);  

            mp.reset();  

            mp.setDataSource(ad.getFileDescriptor(), ad.getStartOffset(), ad.getLength());  

            //  mp.create(this,musics[currentMusic]);  

            mp.prepare();  

            mp.start();  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}

activity代码:

package mm.shandong.com.testsimplemedia;  

import android.content.BroadcastReceiver;  

import android.content.Context;  

import android.content.Intent;  

import android.content.IntentFilter;  

import android.support.v7.app.AppCompatActivity;  

import android.os.Bundle;  

import android.view.View;  

import android.widget.ImageButton;  

import android.widget.TextView;  

  

import mm.shandong.com.testsimplemedia.service.MusicService;  

  

public class TestSimpleMediaActivity extends AppCompatActivity {  

    ImageButton imageButton;  

    TextView textViewMp3Name;  

    TextView textViewMp3Author;  

    int status = 0;  

    String[] authors = new String[]{"张三", "李四", "王二"};  

    String[] names = new String[]{"first", "second", "thrid"};  

    int currentMusic = 0;  

  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.activity_test_simple_media);  

        imageButton = (ImageButton) findViewById(R.id.imageButton);  

        textViewMp3Name = (TextView) findViewById(R.id.textViewMp3Name);  

        textViewMp3Author = (TextView) findViewById(R.id.textViewMp3Author);  

        imageButton.setOnClickListener(new View.OnClickListener() {  

            @Override  

            public void onClick(View view) {  

                Intent intent = new Intent("Get_Music_Control");  

  

                if (status == 2) {  

                    intent.putExtra("control", 0);  

  

                } else {  

                    intent.putExtra("control", 1);  

                }  

                sendBroadcast(intent);  

            }  

        });  

        IntentFilter intentFilter = new IntentFilter();  

        intentFilter.addAction("Update_Music_State");  

        MusicStatusReceiver musicStatusReceiver = new MusicStatusReceiver();  

        //动态注册activity变化的广播接收者  

        registerReceiver(musicStatusReceiver, intentFilter);  

        Intent intent = new Intent(this, MusicService.class);  

        startService(intent);  

  

        Intent intentMusicReceiver = new Intent("Get_Music_Control");  

        intentMusicReceiver.putExtra("control", 3);  

        sendBroadcast(intentMusicReceiver);  

  

    }  

    ///上一首  

    public void preMusic(View view) {  

        Intent intentMusicReceiver = new Intent("Get_Music_Control");  

        intentMusicReceiver.putExtra("control", 4);  

        sendBroadcast(intentMusicReceiver);  

    }  

    ///下一首  

    public void nextMusic(View view) {  

        Intent intentMusicReceiver = new Intent("Get_Music_Control");  

        intentMusicReceiver.putExtra("control", 5);  

        sendBroadcast(intentMusicReceiver);  

    }  

   ///定义操作音乐的广播接收者  

    public class MusicStatusReceiver extends BroadcastReceiver {  

  

        @Override  

        public void onReceive(Context context, Intent intent) {  

            status = intent.getIntExtra("status", 0);  

            currentMusic = intent.getIntExtra("currentMusic", 0);  

            switch (status) {  

                case 0:  

                    textViewMp3Name.setText(names[currentMusic]);  

                    textViewMp3Author.setText(authors[currentMusic]);  

                    imageButton.setBackgroundResource(R.drawable.play32);  

                    break;  

                case 1:  

                    textViewMp3Name.setText(names[currentMusic]);  

                    textViewMp3Author.setText(authors[currentMusic]);  

                    imageButton.setBackgroundResource(R.drawable.play32);  

                    break;  

                case 2:  

                    imageButton.setBackgroundResource(R.drawable.pause32);  

                    textViewMp3Name.setText(names[currentMusic]);  

                    textViewMp3Author.setText(authors[currentMusic]);  

                    break;  

            }  

        }  

    }  

}

最后,您觉得回答满意的话,请关注一下我的微博,我的名字除了中文以外的。

Android要求做一个一个简易音乐播放器。用Service实现

android开发培训一个简单的Android音乐播放器

在这里主要是用两个简单的按钮实现音乐的播放和停止功能,工程的目录结构为:

同时添加一个文件夹,里面放后缀为mp3的文件就可以了。 在main配置文件主要是添加两个Button:

添加一个activity类和一个service类AndroidManifest.xml配置文件为:

创建一个MusicServiceActivity类启动service类:中网互赢 手机客户端

android开发音乐播放器MediaPlayer.prepare()

MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在《Android开发之基于Service的音乐播放器》一文中介绍过它的使用。下面让我们看一下MediaPlayer类的详细介绍。

一、类结构:

java.lang.Object

android.media.MediaPlayer

二、构造方法和公有方法

构造方法:

Public Constructors

MediaPlayer()

默认构造方法。

公有方法:

Public Methods

static MediaPlayer

create(Context context, Uri uri, SurfaceHolder holder)

指定从资源ID对应的资源文件中来装载音乐文件,同时指定了SurfaceHolder对象并返回MediaPlyaer对象。

static MediaPlayer

create(Context context, int resid)

指定从资源ID对应的资源文件中来装载音乐文件,并返回新创建的MediaPlyaer对象。

static MediaPlayer

create(Context context, Uri uri)

从指定Uri装在音频文件,并返回新创建的MediaPlayer对象。

int

getCurrentPosition()

获取当前播放的位置。

int

getDuration()

获取音频的时长。

int

getVideoHeight()

获取视频的高度。

int

getVideoWidth()

获取视频的宽度。

boolean

isLooping()

判断MediaPlayer是否正在循环播放。

boolean

isPlaying()

判断MediaPlayer是否正在播放。

void

pause()

暂停播放。

void

prepare()

准备播放(装载音频),调用此方法会使MediaPlayer进入Prepared状态。

void

prepareAsync()

准备播放异步音频。

void

release()

释放媒体资源。

void

reset()

重置MediaPlayer进入未初始化状态。

void

seekTo(int msec)

寻找指定的时间位置。

void

setAudioStreamType(int streamtype)

设置音频流的类型。

void

setDataSource(String path)

指定装载path路径所代表的文件。

void

setDataSource(Context context, Uri uri, MapString, String headers)

指定装载uri所代表的文件。

void

setDataSource(Context context, Uri uri)

指定装载uri所代表的文件。

void

setDataSource(FileDescriptor fd, long offset, long length)

指定装载fd所代表的文件中从offset开始长度为length的文件内容。

void

setDataSource(FileDescriptor fd)

指定装载fd所代表的文件。

void

setDisplay(SurfaceHolder sh)

设置显示方式。

void

setLooping(boolean looping)

设置是否循环播放。

void

setNextMediaPlayer(MediaPlayer next)

设置当前流媒体播放完毕,下一个播放的MediaPlayer。

void

setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)

注册一个回调函数,在网络视频流缓冲变化时调用。

void

setOnCompletionListener(MediaPlayer.OnCompletionListener listener)

为Media Player的播放完成事件绑定事件监听器。

void

setOnErrorListener(MediaPlayer.OnErrorListener listener)

为MediaPlayer的播放错误事件绑定事件监听器。

void

setOnPreparedListener(MediaPlayer.OnPreparedListener listener)

当MediaPlayer调用prepare()方法时触发该监听器。

void

setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)

当MediaPlayer调用seek()方法时触发该监听器。

void

setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)

注册一个用于监听视频大小改变的监听器。

void

setScreenOnWhilePlaying(boolean screenOn)

置是否使用SurfaceHolder来显示。

void

setSurface(Surface surface)

设置Surface。

void

setVideoScalingMode(int mode)

设置视频缩放的模式。

void

setVolume(float leftVolume, float rightVolume)

设置播放器的音量。

void

setWakeMode(Context context, int mode)

为MediaPlayer设置低级电源管理行为。.

void

start()

开始或恢复播放。

void

stop()

停止播放。

三、常用方法分析:

1.使用进度条:

进度条SeekBar可以用来显示播放进度,用户也可以利用SeekBar的滑块来控制音乐的播放。

SeekBar需要使用的一些方法:

setProgress(int value):设置滑块的位置方法为。

setMax(int value):设置进度条的最大长度。

setOnSeekBarChangeListener(OnSeekBarChangeListener l):设置SeekBar的进度改变事件。

MusicPlayer需要使用的一些方法:

getDuration():获得音乐长度为。

getCurrentPosition():获得现在播放的位置。

seekTo(int msec):调用seekTo()方法可以调整播放的位置。

seekTo(int)方法是异步执行的,所以它可以马上返回,但是实际的定位播放操作可能需要一段时间才能完成,尤其是播放流形式的音频/视频。当实际的定位播放操作完成之后,内部的播放引擎会调用客户端程序员提供的OnSeekComplete.onSeekComplete()回调方法。可以通过setOnSeekCompleteListener(OnSeekCompleteListener)方法注册。

seekTo(int)方法也可以在其它状态下调用,比如Prepared,Paused和PlaybackCompleted状态。此外,目前的播放位置,实际可以调用getCurrentPosition()方法得到,它可以帮助如音乐播放器的应用程序不断更新播放进度。

创建并使用进度条的步骤:

第一步:创建一个进度条

//进度条

static SeekBarskbMusic;

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

第二步:为进度条的改变事件注册并添加监听器

skbMusic.setOnSeekBarChangeListener(sChangeListener);

/**

* SeekBar进度改变事件

*/

OnSeekBarChangeListenersChangeListener=new OnSeekBarChangeListener() {

@Override

publicvoid onStopTrackingTouch(SeekBar seekBar) {

//TODO Auto-generated method stub

//当拖动停止后,控制mediaPlayer播放指定位置的音乐

MusicService.mediaPlayer.seekTo(seekBar.getProgress());

MusicService.isChanging=false;

}

@Override

publicvoid onStartTrackingTouch(SeekBar seekBar) {

//TODO Auto-generated method stub

MusicService.isChanging=true;

}

@Override

publicvoid onProgressChanged(SeekBar seekBar,int progress,

boolean fromUser) {

//TODO Auto-generated method stub

}

};

第三步:设置进度条的最大长度:

//getDuration()方法要在prepare()方法之后,否则会出现Attempt to call getDuration without a valid mediaplayer异常

MusicBox.skbMusic.setMax(mediaPlayer.getDuration());//设置SeekBar的长度

第四步:更新进度条

//----------定时器记录播放进度---------//

mTimer =new Timer();

mTimerTask =new TimerTask() {

@Override

publicvoid run() {

isTimerRunning=true;

if(isChanging==true)//当用户正在拖动进度进度条时不处理进度条的的进度

return;

MusicBox.skbMusic.setProgress(mediaPlayer.getCurrentPosition());

}

};

//每隔10毫秒检测一下播放进度

mTimer.schedule(mTimerTask, 0, 10);

2.装载音频文件:

为了让MediaPlayer来装载指定音频文件,MediaPlayer提供了如下简单的静态方法。

static MediaPlayer create(Context context, Uri uri):从指定Uri来装载音频文件,并返回新创建的MediaPlayer对象。

static MediaPlayer create(Context context, int resid):从 resid资源 ID对应的资源文件中装载音频文件,并返回新创建的MediaPlayer对象。

提示:上而这两个方法用起来非常方便,但这两个方法每次都会返回新创建的MediaPlayer对象,如来程序需要使用MediaPlayer循环播放多个音频文件,使用MediaPlayer的静态create方法就不太合适了,此时可通过MediaPlayer的setDataSource()方法来装载指定的音频文件。MediaPlayer提供了如下方法来指定装载相应的音频文件。

setDataSource(String path):指定装载path路径所代表的文件。

setDataSource(FileDescriptor fd, long offset,long length):指定装载fd所代表的文件中从offset开始长度为length的文件内容。

setDataSource(FileDescriptor fd):指定装载fd所代表的文件。

setDataSource(Context context, Uri uri):指定装载uri所代表的文件。

提示:执行上面所示的setDataSource()方法之后,MediaPlayer并未真正去装载那些音频文件,还需要调用MediaPlayer的prepare()方法去准备音频,所谓“准备”,就是让MediaPlayer真正去装载音频文件。

使用已有的MediaPlayer对象装载“一首”歌曲的代码模板为:

mPlayer.reset();

//装战下一竹歌曲

mPlayer.setDataSource(M/mnt/sdcard/next.mp3);

//准备声音 mPlayer.prepare();

"播放

mPlayer.start();

}

catch (IOException e)

e.printStackTrace();

}

3.与MediaPlayer有关的事件监听器:

MediaPlayer提供了一些绑定事件监听器的方法,用于监听MediaPlayer播放过程中所发生的特定事件,绑定事件监听器的方法如下。

setOnCompletionListener(MediaPlayer.OnCompletionListener listener):为 Media Player的播放完成事件绑定事件监听器。

setOnErrorListener(MediaPlayer.OnErrorListener listener):为MediaPlayer的播放错误事件绑定事件监听器。

setOnPreparedListener(MediaPlayer.OnPreparedListener listener):当 MediaPlayer调用prepare()方法时触发该监听器。

setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener):当MediaPlayer调用seek()方法时触发该监听器。

因此可以在创建一个MediaPlayer对象之后,通过为该MediaPlayer绑定监听器来监听相应的事件,例如如下代码:

//为MediaPlayer的播放完成事件绑定事件监听器

mPlayer.setOnErrorListener(new OnErrorListener() {

@Override

publicboolean onError(MediaPlayer mp,int what,int extra) {

//TODO Auto-generated method stub

//针对错误进行相应的处理

// ... ...

}

});

//为MediaPlayer的播放完成讲件绑定市件监听器

mPlayer.setOnCompletionListener(new OnCompletionListener() {

@Override

publicvoid onCompletion(MediaPlayer mp) {

//TODO Auto-generated method stub

current++;

prepareAndPlay(current);

}

});

四、MediaPlayer播放不同来源的音频文件:

1.播放应用的资源文件

播放应用的资源文件需要两步即:

1) 调用MediaPlayer的create(Context context,int resid)方法加指定资源文件。

2) 调用 MediaPlayer的 start()、pause()、stop()等方法控制播放即可。

例如如下代码:

MediaPlayer mPlayer=new MediaPlayer();

mPlayer.create(this, R.raw.music);

2. 播放应用的原始资源文件

播放应用的资源文件按如下步骤执行。

1) 调用 Context的 getAssets()方法获取应用的 AssetManager。

2) 调用AssetManager对象的openFd(String name)方法打开指定的原生资源,该方法返回一个AssetFileDescriptor对象。

3) 调用 AssetFileDescriptor的 getFileDescriptor()、getStartOffset()和 getLength()方法来获取音频文件的FileDescriptor、开始位置、长度等。

4) 创建MediaPlayer对象(或利用已有的MediaPlayer对象),并调用MediaPlayer对象的setDataSource(FileDescriptor fd,long offset, long length)方法来装载音频资源。

5) 调用MediaPlayer对象的prepare()方法准备音频。

6) 调用MediaPlayer的start()、pause()、stop()等方法控制播放即可。

例如如下代码片段:

//获取assets目录下指定文件的AssetFileDescriptor对象

AssetFileDescriptor assetFileDescriptor=assetManager.openFd(musics[current]);

mediaPlayer.reset();//初始化mediaPlayer对象

mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());

//准备播放音乐

mediaPlayer.prepare();

//播放音乐

mediaPlayer.start();

3. 播放外部存储器上音频文件

播放外部存储器上音频文件按如下步骤执行。

1) 创建MediaPlayer对象(或利用已有的MediaPlayer对象),并调用MediaPlayer对象的setDateSource(String path)方法装载指定的音频文件。

2) 调用MediaPlayer对象的prepare()方法准备音频。

3) 调用MediaPlayer的start()、pause()、stop()等方法控制播放即可。

例如如下代码:

//加载SD卡上的指定资源音频文件

mPlayer.setDataSource("/mnt/You Are The One.mp3");

mPlayer.prepare();//准备因音频

mPlayer.start();//播放音频

4.播放来自网络的音频文件

播放来自网络的音频文件冇两种方式:1.直接使用MediaPlayer的静态create(Context context, Uri uri)方法;2.调用 MediaPlayer的setDataSource(Context context,Uri uri)装载指定Uri对应的音频文件。

以第二种方式播放来自网络的音频文件的步骤如下。

1. 根据网络上的音频文件所在的位置创建Uri对象。

2. 创建MediaPlayer对象(或利用己有的MediaPlayer对象),并调用MediaPlayer对象的 setDateSource(Context context,Uri uri)方法装载Uri对应的音频文件。

3. 调用MediaPlayer对象的prepare()方法准备音频。

4. 调用MediaPlayer的start()、pause()、stop()等方法控制播放即可。

关于android简单音乐播放器代码和android本地音乐播放器代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/20009.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载