java安卓开发中音乐播放上一首下一首怎么实现

我是把mp3格式文件放在raw文件夹内,播放代码为:
mp = MediaPlayer.create(MainActivity.this,R.raw.music);
mp.start();
如何做到上一首下一首切换,希望能有一个例子(比如raw内有两个文件:music.mp3与music1.mpc)。
例子能看得更加具体,明白。

首先你 要有个list存放它的物理路径,切歌也只是更改他的下标获取不同歌曲的物理路径

能不能给我几句,让我看看例子。。。我知道是用list,不知道怎么实现。。

这是我以前写的一个音乐播放器业务层的service 包括了上一首下一首 播放暂停等功能 自己参考下吧

 public class MainService extends Service {
    //列表循环
    public static final int MENU_RECICLE=1;
    //单曲循环
    public static final int SINGLE_RECICLE=2;
    //随机播放
    public static final int RADOM=3;
    //播放下一首
    public static final int OPER_NEXT=1;
    //播放上一首
    public static final int OPER_PREVIOUS=-1;

    /*当前歌曲播放状态——播放列表刚刚加载或没有加载,并未播放任何歌曲*/
    private static final int UNPLAY=-1; 
    /*当前歌曲播放状态——当前歌曲被暂停*/
    private static final int PAUSE=1;
    /*当前歌曲播放状态——当前歌曲被停止*/
    private static final int STOP=2;
    /*当前歌曲播放状态——正在播放*/
    private static final int PLAYING=3;
    /*当前歌曲播放状态——播放完成*/
    private static final int PLAYCOM=4;

    //保存当前播放状态
    private int currMode=MENU_RECICLE;
    //用于显示播放列表的数据源
    private List<Map<String,Object>> musicList=new ArrayList<Map<String,Object>>();

    private MediaPlayer mPlayer;
    //当前播放的歌曲索引
    private int currIndex=-1;
    //当前歌曲的播放状态
    private int currStatus=UNPLAY;


    public MainService() {
        super();
        // TODO Auto-generated constructor stub
        mPlayer=new MediaPlayer();
        mPlayer.setOnCompletionListener(new OnCompletionListener(){

            @Override
            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                currStatus=PLAYCOM;
            }

        });
    }


    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return new MainBinder();

    }


    public boolean isComplete(){
        return currStatus==PLAYCOM;
    }

    /**
     * 获得当前切换策略的内容
     * @return
     */
    public String getMode(){
        switch(currMode){
            case MENU_RECICLE:
                return "列表循环";
            case SINGLE_RECICLE:
                return "单曲循环";
            case RADOM:
                return "随机播放";
            default:
                return "";
        }
    }

    /**
     * 改变切换策略
     * @return
     */
    public String changeMode(){
        switch(currMode){
            case MENU_RECICLE:
                currMode=SINGLE_RECICLE;
                return "单曲循环";
            case SINGLE_RECICLE:
                currMode=RADOM;
                return "随机播放";
            case RADOM:
                currMode=MENU_RECICLE;
                return "列表循环";
            default:
                return "";
        }
    }

    /**
     * 找当前目录下的音乐文件
     * @param musicUrl 要找寻音乐文件的目录路径
     * @return
     */
    public List<Map<String,Object>> refeshMusicList(String musicUrl){
        File musicDir=new File(musicUrl);
        if(musicDir!=null&&musicDir.isDirectory()){
            File[] musicFile=musicDir.listFiles(new MusicFilter());
            if(musicFile!=null){
                musicList=new ArrayList<Map<String,Object>>();
                for(int i=0;i<musicFile.length;i++){
                    File currMusic=musicFile[i];
                        //获取当前目录的名称和绝对路径
                    String abPath=currMusic.getAbsolutePath();
                    String musicName=currMusic.getName();
                    Map<String,Object> currMusicMap=new HashMap<String,Object>();
                    currMusicMap.put("musicName", musicName);
                    currMusicMap.put("musicAbPath", abPath);
                    musicList.add(currMusicMap);
                }

            }else{
                musicList = new ArrayList<Map<String,Object>>();
            }
        }else{
            musicList = new ArrayList<Map<String,Object>>();
        }
        return musicList;
    }

    /**
     * 播放歌曲
     * @param musicPo 要播放的歌曲在歌曲列表中的索引
     * @throws IllegalArgumentException
     * @throws SecurityException
     * @throws IllegalStateException
     * @throws IOException
     */
    public void playMusic(int musicPo) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException{
        Map<String,Object> currMusic=musicList.get(musicPo);
        String musicUrl=(String)currMusic.get("musicAbPath");
        mPlayer.reset();
        mPlayer.setDataSource(musicUrl);
        mPlayer.prepare();
        mPlayer.start();
        currIndex=musicPo;
        currStatus=PLAYING;
    }

    /**
     * 停止播放
     */
    public void stopPlay(){
        mPlayer.stop();
        currStatus=STOP;
    }


    /**
     * 播放一首新的歌曲
     * @param operCode 播放操作(是上一首还是下一首)
     * @throws IllegalArgumentException
     * @throws SecurityException
     * @throws IllegalStateException
     * @throws IOException
     */
    public void playNew(int operCode) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException{
        if(musicList.size()>0){
            switch(currMode){
                case MENU_RECICLE:
                    int newIndex=0;
                    switch(operCode){
                        case OPER_NEXT:
                            newIndex=currIndex+1;
                            if(newIndex>=musicList.size()){
                                newIndex=0;
                            }
                            break;
                        case OPER_PREVIOUS:
                            newIndex=currIndex-1;
                            if(newIndex<0){
                                newIndex=musicList.size()-1;
                            }
                            break;
                    }
                    playMusic(newIndex);
                    break;
                case SINGLE_RECICLE:
                    playMusic(currIndex);
                    break;
                case RADOM:
                    Random rd=new Random();
                    int randomIndex=rd.nextInt(musicList.size());
                    playMusic(randomIndex);
                    break;
            }
        }
    }
    /**
     * 暂停当前歌曲的播放
     */
    public void pause(){
        mPlayer.pause();
        currStatus=PAUSE;
    }

    /*
     * 释放当前播放的音乐资源
     */
    public void release(){
        mPlayer.release();
        currStatus=UNPLAY;
    }

    /**
     * 播放按钮要执行播放操作时调用
     * @throws IOException 
     * @throws IllegalStateException 
     * @throws SecurityException 
     * @throws IllegalArgumentException 
     */
    public void play() throws IllegalArgumentException, SecurityException, IllegalStateException, IOException{
        if(musicList.size()>0){
            switch(currStatus){
                case UNPLAY:
                    playMusic(0);
                    break;
                case STOP:
                    mPlayer.prepare();
                    mPlayer.seekTo(0);
                case PAUSE:
                    mPlayer.start();
                    currStatus=PLAYING;
                    break;
            }
        }

    }
    /**
     * 改变当前播放进度
     * @param progress 新的播放进度
     */
    public void changePro(int progress){
        if(mPlayer.isPlaying()){
            mPlayer.seekTo(progress);
        }
    }

    /**
     * 获取当前音乐播放进度
     * @return 当前音乐的播放进度
     */
    public int getMusicPro(){
        if(mPlayer.isPlaying()){
            return mPlayer.getCurrentPosition();
        }else{
            return 0;
        }
    }
    /**
     * 获取当前音乐的总时长
     * @return
     */
    public int getMusicDur(){
        return mPlayer.getDuration();
    }

    private class MusicFilter implements FileFilter{

        @Override
        public boolean accept(File pathname) {
            // TODO Auto-generated method stub
            if(pathname.isFile()==true){
                String fileName=pathname.getName();
                String lowerName=fileName.toLowerCase();
                return lowerName.endsWith(".mp3");
            }else{
                return false;
            }

        }

    }







    public class MainBinder extends Binder{
        public MainService getService(){
            return MainService.this;
        }
    }
}

知道当前播放的路径在集合中的position,通过对position +1或-1来获取下一首个播放的路径,结束当前的那首歌播放下一首的不就行了

mediaplayuer播放音乐传入就是路径,你把路径改变了歌曲就变了啊 ,上面说的很清楚了感觉,不行你直接用1楼的代码加入自己的逻辑实现了先,再取琢磨认真的