2014-10-01 72 views
1

你好我正在看这个教程on the web:但它有一些错误,并没有看到工作正确。如何从RAW文件夹,而不是SDCARD加载MP3文件

我只是想知道,如何从SDCARD的RAW文件夹中加载我的MP3文件,如下面的代码所示。感谢

public class SongsManager { 
    // SDCard Path 
    final String MEDIA_PATH = new String("/sdcard/"); 
    private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

    // Constructor 
    public SongsManager(){ 

    } 

    /** 
    * Function to read all mp3 files from sdcard 
    * and store the details in ArrayList 
    * */ 
    public ArrayList<HashMap<String, String>> getPlayList(){ 
     File home = new File(MEDIA_PATH); 

     if (home.listFiles(new FileExtensionFilter()).length > 0) { 
      for (File file : home.listFiles(new FileExtensionFilter())) { 
       HashMap<String, String> song = new HashMap<String, String>(); 
       song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4))); 
       song.put("songPath", file.getPath()); 

       // Adding each song to SongList 
       songsList.add(song); 
      } 
     } 
     // return songs list array 
     return songsList; 
    } 

    /** 
    * Class to filter files which are having .mp3 extension 
    * */ 
    class FileExtensionFilter implements FilenameFilter { 
     public boolean accept(File dir, String name) { 
      return (name.endsWith(".mp3") || name.endsWith(".MP3")); 
     } 
    } 
} 

回答

0

使用raw资源与媒体播放类ID,像MediaPlayer。因此,例如,如果您有res/raw/resources_are_not_files.mp3,则可以使用R.raw.resources_are_not_files来引用该MP3的方法,如create() on MediaPlayer

+0

一个疑问..如果我们加载原始文件夹中的.mp3文件,它将反映在.apk大小中。 – SaravanaRaja 2014-10-01 16:55:55

+1

@ S3a2r0a8v9a6n9a:是的,打包在APK中的MP3文件将增加APK的大小。由于MP3已经是压缩格式,所以APK的大小将会增加大约MP3文件本身的大小。因此,这种技术主要适用于短暂的声音效果等,而不是音乐小时。 – CommonsWare 2014-10-01 16:58:15

+0

感谢您的明确解释:) – SaravanaRaja 2014-10-01 17:02:31

2

正如你所要求的

>如何加载我原始文件夹中的MP3文件已插入SDCARD

个答案是:

MediaPlayer mplayer;  
mplayer= MediaPlayer.create(this, R.raw.soundfile);// it is the file that you save in ur raw folder 
mplayer.start(); 

如果你想完整的例子

你可以试试这个代码:

package com.hrupin.mp3player; 

import com.hrupin.mp3player.R; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.widget.Button; 
import android.widget.SeekBar; 

public class Mp3player extends Activity { 

    private Button buttonPlayStop; 
    private MediaPlayer mediaPlayer; 
    private SeekBar seekBar; 

    private final Handler handler = new Handler(); 

    // Here i override onCreate method. 
    // 
    // setContentView() method set the layout that you will see then 
    // the application will starts 
    // 
    // initViews() method i create to init views components. 
    @Override 
    public void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      setContentView(R.layout.main); 
      initViews(); 

    } 

    // This method set the setOnClickListener and method for it (buttonClick()) 
    private void initViews() { 
     buttonPlayStop = (Button) findViewById(R.id.ButtonPlayStop); 
     buttonPlayStop.setOnClickListener(new OnClickListener() {@Override public void onClick(View v) {buttonClick();}}); 

     mediaPlayer = MediaPlayer.create(this, R.raw.testsong_20_sec); 

     seekBar = (SeekBar) findViewById(R.id.SeekBar01); 
     seekBar.setMax(mediaPlayer.getDuration()); 
     seekBar.setOnTouchListener(new OnTouchListener() {@Override public boolean onTouch(View v, MotionEvent event) { 
      seekChange(v); 
      return false; } 
     }); 

    } 

    public void startPlayProgressUpdater() { 
     seekBar.setProgress(mediaPlayer.getCurrentPosition()); 

     if (mediaPlayer.isPlaying()) { 
      Runnable notification = new Runnable() { 
       public void run() { 
        startPlayProgressUpdater(); 
       } 
      }; 
      handler.postDelayed(notification,1000); 
     }else{ 
      mediaPlayer.pause(); 
      buttonPlayStop.setText(getString(R.string.play_str)); 
      seekBar.setProgress(0); 
     } 
    } 

    // This is event handler thumb moving event 
    private void seekChange(View v){ 
     if(mediaPlayer.isPlaying()){ 
      SeekBar sb = (SeekBar)v; 
      mediaPlayer.seekTo(sb.getProgress()); 
     } 
    } 

    // This is event handler for buttonClick event 
    private void buttonClick(){ 
     if (buttonPlayStop.getText() == getString(R.string.play_str)) { 
      buttonPlayStop.setText(getString(R.string.pause_str)); 
      try{ 
       mediaPlayer.start(); 
       startPlayProgressUpdater(); 
      }catch (IllegalStateException e) { 
       mediaPlayer.pause(); 
      } 
     }else { 
      buttonPlayStop.setText(getString(R.string.play_str)); 
      mediaPlayer.pause(); 
     } 
    } 

希望这有助于... :)

相关问题