Mam następujący kod:
AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.start();
Problem polega na tym, że kiedy uruchamiam ten kod, zaczyna on odtwarzać wszystkie pliki audio w katalogu zasobów, w kolejności alfabetycznej, zamiast po prostu odtwarzać plik audio, o który prosiłem. Co ja robię źle? Czy istnieje lepszy sposób odtwarzania plików audio z katalogu zasobów?
Pytanie uzupełniające: czy istnieje różnica między przechowywaniem plików audio w katalogu zasobów a przechowywaniem ich w katalogu res / raw? Poza tym, że nie otrzymują identyfikatorów, jeśli znajdują się w katalogu zasobów. Jeśli przenoszę pliki audio do folderu res / raw, to mam problem z ponownym użyciem MediaPlayer
s, ponieważ nie ma parametru id dla setDataSource()
. Nie mogę znaleźć dobrych wskazówek, jak radzić sobie z tego rodzaju problemem.
źródło
Ta funkcja będzie działać poprawnie :)
źródło
MediaPlayer m
musi byćstatic
lub mieć inne odniesienie . Jeśli maszm
funkcję bez odniesienia,GC
„zbierze” jąTutaj moja statyczna wersja:
źródło
Poprawka powyższej funkcji do odtwarzania i pauzy
źródło
rozpocząć dźwięk
metoda
źródło
to działa dla mnie:
W głównej działalności przy tworzeniu:
jak używać w kodzie (po kliknięciu przycisku):
źródło