zoukankan      html  css  js  c++  java
  • 团队冲刺第二天

    .我在昨天的基础上学习了多音乐的播放,切换音乐,进度条显示。设置按钮上一首和下一首的操作,发现用到了线程方面的知识,我又重新学习了线程。并打算通过SD可以直接使用手机内存中的音乐,但是一直显示SD音乐导入不进去。明天继续bug的修改。

    主要代码:

    package com.example.keeprunning;
    
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.os.Environment;
    import android.util.Log;
    
    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MusicService {
        //获取SD卡总目录
        //private static final File PATH = Environment.getExternalStorageDirectory();
        String  PATH=Environment.getExternalStorageDirectory().getAbsolutePath();
    
        //存放找到的所有mp3的绝对路径
    
    
        public List<String> musicList;
        //定义多媒体对象
        public MediaPlayer player;
        //当前播放的歌曲在List中的下标,flag为标致
        public int songNum;
        //当前播放的歌曲名
        public String songName;
    
    
        //写一个内部类供加载mp3文件的时候调用
        class MusicFilter implements FilenameFilter {
            public boolean accept(File dir, String name) {
                //返回当前目录所有以.mp3结尾的文件
                return (name.endsWith(".mp3"));
            }
        }
        //在MusicService类的无参构造函数中实例化对象,并把这些MP3文件放到musicList中
        public MusicService() {
            super();
            //实例化一个多媒体对象
            player = new MediaPlayer();
            //实例化一个List链表数组
            musicList = new ArrayList<String>();
            try {
                //获取根目录的二级目录Music
                File MUSIC_PATH = new File(PATH, "Music");
                if (MUSIC_PATH.listFiles(new MusicFilter()).length > 0) {
                    for (File file : MUSIC_PATH.listFiles(new MusicFilter())) {
                        musicList.add(file.getAbsolutePath());
                    }
                }
            } catch (Exception e) {
                Log.i("TAG", "读取文件异常");
            }
    
        }
    
        //用setPlayName方法来修改获取到的mp3文件的名字供我们在TextView页面中使用
        public void setPlayName(String dataSource){
            File file=new File(dataSource);
            String name=file.getName();
            int index=name.lastIndexOf(".");
            songName=name.substring(0,index);
        }
    
        //定义play类实现单首音乐的播放
        public void play(){
            try{
                //重制多媒体
                player.reset();
                //得到当前播放音乐的路径
                String dataSource =musicList.get(songNum);
                //载取歌名
                setPlayName(dataSource);
                //指定参数为音频文件
                player.setAudioStreamType(AudioManager.STREAM_MUSIC);
                //为多媒体对象设置播放路径
                player.setDataSource(dataSource);
                //准备播放
                player.prepare();
                //开始播放
                player.start();
    
                //setOnCompletionListener当前多媒体对象播放完成时发生的事件
                player.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
                    public void onCompletion(MediaPlayer arg0){
                        //如果当前歌曲播放完毕,自动播放下一首
                        next();
                    }
                });
            }catch(Exception e){
                Log.v("MusicService", e.getMessage());
            }
        }
    
        //继续播放
        public void goPlay(){
            int position=getCurrentProgress();
            //设置当前MediaPlayer的播放位置,单位是毫秒
            player.seekTo(position);
            try{
                //同步方式装载流媒体文件
                player.prepare();
            }catch(Exception e){
                e.printStackTrace();
            }
            player.start();
        }
    
        // 获取当前进度
        public int getCurrentProgress() {
            if (player != null & player.isPlaying()) {
                return player.getCurrentPosition();
            } else if (player != null & (!player.isPlaying())) {
                return player.getCurrentPosition();
            }
            return 0;
        }
    
        public void next() {
            songNum = songNum == musicList.size() - 1 ? 0 : songNum + 1;
            play();
        }
    
        public void last() {
            songNum = songNum == 0 ? musicList.size() - 1 : songNum - 1;
            play();
        }
        // 暂停播放
        public void pause() {
            if (player != null && player.isPlaying()){
                player.pause();
            }
        }
    
        public void stop() {
            if (player != null && player.isPlaying()) {
                player.stop();
                player.reset();
            }
        }
    }
    View Code
     //为各组事件绑定监听事件
            try {
                setListViewAdapter();//添加文件名字
            } catch (Exception e) {
                Log.i("TAG", "读取信息失败");
            }
    
            btnStart = (Button) findViewById(R.id.btn_star);
            btnStart.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        /**
                         * 引入flag作为标志,当flag为1 的时候,此时player内没有东西,所以执行musicService.play()函数
                         * 进行第一次播放,然后flag自增二不再进行第一次播放
                         * 当再次点击“开始/暂停”按钮次数即大于1 将执行暂停或继续播放goplay()函数
                         */
                        if (flag == 1) {
                            musicService.play();
                            flag++;
                        } else {
                            if (!musicService.player.isPlaying()) {
                                musicService.goPlay();
                            } else if (musicService.player.isPlaying()) {
                                musicService.pause();
                            }
                        }
                    } catch (Exception e) {
                        Log.i("LAT", "开始异常!");
                    }
    
                }
            });
    
            btnStop = (Button) findViewById(R.id.btn_stop);
            btnStop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        musicService.stop();
                        flag = 1;//当点击停止按钮时,flag置为1
                        seekBar.setProgress(0);
                        txtInfo.setText("播放已经停止");
                    } catch (Exception e) {
                        Log.i("LAT", "停止异常!");
                    }
    
                }
            });
    
            btnLast = (Button) findViewById(R.id.btn_last);
            btnLast.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        musicService.last();
                    } catch (Exception e) {
                        Log.i("LAT", "上一曲异常!");
                    }
    
                }
            });
    
            btnNext = (Button) findViewById(R.id.btn_next);
            btnNext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        musicService.next();
                    } catch (Exception e) {
                        Log.i("LAT", "下一曲异常!");
                    }
    
                }
            });
    
            seekBar = (SeekBar) findViewById(R.id.sb);
            seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int i, boolean b) {//用于监听SeekBar进度值的改变
    
                }
    
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {//用于监听SeekBar开始拖动
    
                }
    
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {//用于监听SeekBar停止拖动  SeekBar停止拖动后的事件
                    int progress = seekBar.getProgress();
                    Log.i("TAG:", "" + progress + "");
                    int musicMax = musicService.player.getDuration(); //得到该首歌曲最长秒数
                    int seekBarMax = seekBar.getMax();
                    musicService.player
                            .seekTo(musicMax * progress / seekBarMax);//跳到该曲该秒
                    autoChange = true;
                    manulChange = false;
                }
            });
    
        }
    View Code
  • 相关阅读:
    Android购物商城
    Android简易计算器
    安卓第四周作业
    第一次安卓作业
    十五周课后习题
    第十三周作业
    十三周上机练习
    第十二周作业
    第十二周练习
    11周上机作业(5.14)
  • 原文地址:https://www.cnblogs.com/hhjing/p/12716446.html
Copyright © 2011-2022 走看看