Загрузка нескольких аудио файлов с SD-карты - PullRequest
1 голос
/ 22 июня 2010

Мне нужна помощь / указатель на документ / пример кода о том, как загрузить несколько аудиофайлов из определенной папки на SD-карте и воспроизвести случайный файл (я думаю, что смогу выяснить последний шаг, если бы я мог простовыяснить, как загрузить несколько файлов).Пока это мое невероятно плохо написанное приложение, не судите слишком резко, поскольку я учусь на ходу.

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 Ответ

1 голос
/ 22 июня 2010

Память на мобильных устройствах чрезвычайно ограничена, поэтому вы не захотите загружать песни, которые не собираетесь воспроизводить.Итак, вам нужно найти все аудиофайлы в этой папке, а затем выбрать один, ЗАПРЕЩАТЬ загрузить и воспроизвести его.

Вам просто нужно остановить текущий проигрыватель и создать новый экземпляр.

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();
...