从SD卡加载多个音频文件

时间:2010-06-21 20:23:57

标签: android audio media

我需要有关如何从SD卡上的特定文件夹加载多个音频文件的doc /示例代码的帮助/指针,并让它回放一个随机文件(我想我可以找到最后一步,如果我可以弄清楚如何加载多个文件)。到目前为止,这是我写得非常糟糕的应用程序,在我学习的时候不要过于严厉地判断。

public class zazenbox extends Activity implements OnClickListener{

File filecheck;
MediaPlayer player;
Button playerButton;
Integer var1;
String path1;
AlertDialog.Builder alertbox;

public void onClick(View v) {
    if (v.getId() == R.id.play) {
        playPause();
    }
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    demoLoad();

    playerButton = (Button) this.findViewById(R.id.play);
    playerButton.setText(R.string.stop);
    playerButton.setOnClickListener(this);

    demoPlay();
}

@Override
public void onPause() {
    super.onPause();
    player.pause();
}

@Override
public void onStop() {
    super.onStop();
    player.stop();
}

private void demoLoad() {

    dirfilecheck();

    player = new MediaPlayer();
    player.setLooping(true);
    try {
        player.setDataSource(path1);
        player.prepare();
    }
    catch (IOException e) { e.printStackTrace(); }
    catch (IllegalArgumentException e) { e.printStackTrace(); }
    catch (IllegalStateException e) { e.printStackTrace(); }
}

private void dirfilecheck() {
    filecheck = new File(Environment.getExternalStorageDirectory() + "/zazenbox");

    if(filecheck.exists() && filecheck.isDirectory()) {
        // load files.
        var1 = 1;
        path1 = filecheck + "/bm10" + var1 + ".wav";
    } else {
        // create folder, dl sample loop, and instruct user how to add music/loops.
        filecheck.mkdirs();
        alertbox = new AlertDialog.Builder(this);
        alertbox.setMessage("Please put loopable media in zazenbox on your sdcard.");
        alertbox.setNeutralButton("Ok, I will.", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface arg0, int arg1) {
                Toast.makeText(getApplicationContext(), "Please plug in your device now", Toast.LENGTH_LONG).show();
            }
        });

        alertbox.show();
    }
}

private void demoPause() {
    player.pause();
    playerButton.setText(R.string.play);
}

private void demoStop() {
    player.stop();
    playerButton.setText(R.string.play);
}


private void demoPlay() {
    player.start();
    playerButton.setText(R.string.stop);
}

private void playPause() {
    if(player.isPlaying()) {
        demoStop();
        //demoPause();
        //player.release();
        var1++;
        path1 = filecheck + "/bm10" + var1 + ".wav";
        /*try {
            player.setDataSource(path1);
            player.prepare();
        }
        catch (IOException e) { e.printStackTrace(); }
        catch (IllegalArgumentException e) { e.printStackTrace(); }
        catch (IllegalStateException e) { e.printStackTrace(); }*/
        //player.start();
        //demoPlay();
    } else {
        //do stuff
        demoPlay();
    }
}

}

1 个答案:

答案 0 :(得分:1)

移动设备上的内存非常有限,因此您不希望加载您不会播放的歌曲。所以你应该做的是找到该文件夹​​中的所有音频文件,然后选择一个,然后加载并播放它。

您只需要停止当前播放器并创建一个新实例。

MediaPlayer player = MediaPlayer.create(this, Uri.parse("Path/To/Media"));
player.start();
// change track
player.stop();
player = MediaPlayer.create(this, Uri.parse("New/Path/To/Media"));
player.start();
相关问题