读取SD卡文件夹下的MP3文件和播放MP3文件

  首先获取SD卡path路径下的所有的MP3文件,并将文件名和文件大小存入List数组(此代码定义在FileUtils类中):

    /**
    * 读取目录中的Mp3文件的名字和大小
    */
    public List<Mp3Info> getMp3Files(String path) {
      SDCardRoot = Environment.getExternalStorageDirectory()
        .getAbsolutePath(); //获取SD卡的路径名
      List<Mp3Info> mp3Infos = new ArrayList<Mp3Info>();
      File file = new File(SDCardRoot + File.separator + path);
      File[] files = file.listFiles();
      for (int i = 0; i < files.length; i++) {
        if (files[i].getName().endsWith(".mp3")) {
          Mp3Info mp3Info = new Mp3Info();
          mp3Info.setMp3Name(files[i].getName());
          mp3Info.setMp3Size(files[i].length() + "");
          mp3Infos.add(mp3Info);  //此mp3Info对象中包含mp3文件名和文件大小
        }
      }
      return mp3Infos;
    }

  当前Activity继承自ListActivity,在此Activity的onResume方法中调用getMp3Files()方法,获取路径下的Mp3文件

    @Override
    protected void onResume() {
      FileUtils fileUtils = new FileUtils();
      mp3Infos = fileUtils.getMp3Files("mp3/");
      List<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
      for(Iterator iterator = mp3Infos.iterator();iterator.hasNext();){
        Mp3Info mp3Info = (Mp3Info) iterator.next();
        HashMap<String,String> map = new HashMap<String,String>();
        map.put("mp3_name", mp3Info.getMp3Name());
        map.put("size_id", mp3Info.getMp3Size());
        list.add(map);
      }
      SimpleAdapter simpleAdapter = new SimpleAdapter(this,list,R.layout.mp3info_item,new String[]{"mp3_name","size_id"},new int[]                {R.id.mp3_name,R.id.size_id});    //mp3info_item.xml文件中仅有两个TextView,id为mp3_name和size_id
      setListAdapter(simpleAdapter);
      super.onResume();
    }

  当点击当前Activity中的某一行时,播放当前行的Mp3文件:

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
      if(mp3Infos != null){
        Mp3Info mp3Info = mp3Infos.get(position);
        Intent intent = new Intent();
        intent.putExtra("mp3Info", mp3Info);
        intent.setClass(this,PlayerActivity.class);
        startActivity(intent);
      }
      super.onListItemClick(l, v, position, id);
    }

    PlayerActivity.class类中通过Service来播放选中的Mp3文件,定义如下:

      public class PlayerActivity extends Activity {

        private ImageButton beginButton = null;
        private ImageButton pauseButton = null;
        private ImageButton stopButton = null;
        private Mp3Info mp3Info = null;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
          setContentView(R.layout.player);
          super.onCreate(savedInstanceState);
          Intent intent = getIntent();
          mp3Info = (Mp3Info) intent.getSerializableExtra("mp3Info");
          beginButton = (ImageButton) findViewById(R.id.begin);
          pauseButton = (ImageButton) findViewById(R.id.pause);
          stopButton = (ImageButton) findViewById(R.id.stop);
          ButtonClickListener listener = new ButtonClickListener();
          beginButton.setOnClickListener(listener);
          pauseButton.setOnClickListener(listener);
          stopButton.setOnClickListener(listener);
        }

      class ButtonClickListener implements OnClickListener {

        @Override
        public void onClick(View v) {
          if (v.getId() == R.id.begin) { // 播放按键
            //创建一个intent对象,通知Service开始播放MP3
            Intent intent = new Intent();
            intent.setClass(PlayerActivity.this, PlayerService.class);
            intent.putExtra("mp3Info", mp3Info);
            intent.putExtra("MSG", AppConstant.PlayerMsg.PLAY_MSG);
            //启动Service
            startService(intent);
          } else if (v.getId() == R.id.pause) {
            //通知Service暂停播放MP3
            Intent intent = new Intent();
            intent.setClass(PlayerActivity.this, PlayerService.class);
            intent.putExtra("MSG", AppConstant.PlayerMsg.PAUSE_MSG);
            startService(intent);
          } else if (v.getId() == R.id.stop) {
            //通知Service停止MP3文件
            Intent intent = new Intent();
            intent.setClass(PlayerActivity.this, PlayerService.class);
            intent.putExtra("MSG", AppConstant.PlayerMsg.STOP_MSG);
            startService(intent);
          }
        }

      }
    }

  PlayerService定义如下:

    public class PlayerService extends Service {

      private boolean isPlaying = false;
      private boolean isPause = false;
      private boolean isReleased = false;
      private MediaPlayer mediaPlayer = null;
      private Mp3Info mp3Info = null;
      private ArrayList<Queue> queues = null;

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

      // 每次从Activity向Service发送intent对象时,触发该事件
      @Override
      public int onStartCommand(Intent intent, int flags, int startId) {
        mp3Info = (Mp3Info) intent.getSerializableExtra("mp3Info");
        int MSG = intent.getIntExtra("MSG", 0);
        if (mp3Info != null) {
          if (MSG == AppConstant.PlayerMsg.PLAY_MSG) {
            play(mp3Info);
          }
        }
        else{
          if(MSG == AppConstant.PlayerMsg.PAUSE_MSG){
            pause();
          }
          else if(MSG == AppConstant.PlayerMsg.STOP_MSG){
            stop();
          }
        }
        return super.onStartCommand(intent, flags, startId);
      }
      private void play(Mp3Info mp3Info){
        if(!isPlaying){
          String path = getMp3Path(mp3Info);
          mediaPlayer = MediaPlayer.create(this, Uri.parse("file://" + path));
          mediaPlayer.setLooping(true);   //设置歌曲循环播放
          mediaPlayer.start();
          isPlaying = true;
          isReleased = false;
        }
      }

      private void pause(){
        if(mediaPlayer != null){
          if(isPlaying){
            mediaPlayer.pause();
          } else{
            mediaPlayer.start();
          }
          isPlaying = isPlaying ? false : true;
        }
      }
      private void stop(){
        if(mediaPlayer!=null){
          if(isPlaying){
            if(!isReleased){
              mediaPlayer.stop();
              mediaPlayer.release();
              isReleased = true;
              isPlaying = false;
            }
          }
        }
      }
      private String getMp3Path(Mp3Info mp3Info){
        String SDCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath();
        String path = SDCardRoot + File.separator + "mp3" + File.separator + mp3Info.getMp3Name();
        return path;
      }

时间: 2024-10-10 11:01:35

读取SD卡文件夹下的MP3文件和播放MP3文件的相关文章

Android得到SD卡文件夹大小以及删除文件夹操作

float cacheSize = dirSize(new File(Environment.getExternalStorageDirectory() + AppConstants.APP_CACHE_FOLDER)) / 1024.0f / 1024.0f; tvCacheSize.setText(((int) (cacheSize * 100)) / 100.0f + "M"); /** * Return the size of a directory in bytes */ p

python读取文件夹及其子文件夹下所有含有中文字符串的lua文件

#!/usr/bin/python #coding=utf-8 import sys import os import shutil import struct import hashlib import re G_WORK_PATH = "E:\phoneclient" G_TARGET_PATH = [  #lua:  ["%s/sdz/script",     "(.*\.lua)",], ] G_OUTPUT_LIST = [] #跳转至

Windows Phone8.1中SD卡文件的读取写入方法汇总

起初我想从SD卡上读取文件可以从两个方面着手吧: 1.通过文件选择器FileOpenPicker,来逐层到手机找到需要读取的文件,然后点击直接读取显示内容 2.直接到SD卡中读取文件 第一种方法逻辑有些复杂,设计到应用暂时的挂起和恢复,这篇博客不深究这种方法 第二种方法,相对于来说逻辑就比较简单了.只要获取到SD卡对象,遍历里面的文件或者直接指定某一个文件夹,接下 来就是读取文件内容或文件夹中的内容了. 对于上面的两种方法,作为初学者的我最近都尝试了好几遍,着实感觉学到了好多.多次逛博客,贴吧,

android客户端把SD卡文件上传到服务器端并保存在PC硬盘文件夹中

在局域网内,实现从android客户端把手机SD卡上的文件上传到PC服务器端,并保存在PC硬盘的指定文件夹下.同时把PC端硬盘文件的目录和对文件的描述信息保存在mysql数据库中. 1.客户端关键代码: (1)获得SD卡上的文件 /** * 获得文件路径和状态信息 * * @return */ private String getFiles() { File path = null; // 判断SD卡是否存在可用 if (Environment.getExternalStorageState()

nodejs 文件系统(fs) 删除文件夹 及 子文件夹下的所有内容

http://blog.163.com/hule_sky/blog/static/2091622452015112821829773/ node 文件系统fs 为我们提供了一些方法 进行文件和文件夹的读写删除等操作 下边将介绍删除文件夹及子文件夹下的所有内容的相关命令(均含有同步和异步方法) 1. fs.stat && fs.statSync 提供了访问文件的属性信息 2. fs.readdir && fs.readdirSync 提供读取文件目录信息 3. fs.unli

数码相机SD卡文件格式化了怎么恢复

SD卡是一种广泛运用于数码相机.手机.多媒体播放器等便携设备上的存储记忆卡.作为使用最广泛的存储载体,SD卡因为拥有高记忆容量.快速数据传输率.极大的移动灵活性以及很好的安全性,同时性价比比较高,被大多数数码相机采用.在数据安全性方面,SD卡文件丢失是一个不容忽视的问题,格式化就是最常见的一种.那么,数码相机SD卡文件格式化了怎么恢复呢?SD卡格式化之后的恢复方法一般有三种. 第一种是从备份中恢复.一定要备份,我相信这是大多数有过数据丢失经历的小伙伴们都深有体会.当你出去旅行拍完照片,回来之后,

Java 遍历指定文件夹及子文件夹下的文件

/** * 遍历指定文件夹及子文件夹下的文件 * * @author testcs_dn * @date 2014年12月12日下午2:33:49 * @param file 要遍历的指定文件夹 * @param collector 符合条件的结果加入到此List<File>中 * @param pathInclude 路径中包括指定的字符串 * @param fileNameInclude 文件名称(不包括扩展名)中包括指定的字符串 * @param extnEquals 文件扩展名为指定字

遍历文件夹及其子文件夹下的.pdf文件,并解压文件夹下所有的压缩包

List<PDFPATH> pdfpath = new List<PDFPATH>(); List<string> ziplist = new List<string>(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrows

获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中)

import java.io.File; import java.io.FileFilter; import java.io.ObjectInputStream.GetField; import java.util.ArrayList; import java.util.List; public class huoquwenjian { /*获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中) * 思路: * 1,既然包含子目录,就需要递归. * 2