Я делаю приложение для Android, которое воспроизводит аудиофайл и переворачивается между двумя экранами. когда я нажимаю на экран, воспроизводится звук и появляется следующий экран. Я могу сделать это примерно десять раз, прежде чем звук остановится, но я могу продолжать нажимать на кнопку и перейти к следующему экрану. Я уже посмотрел mediaplayer-stops-playing-after-playing-a-few-times. Тем не менее, я не знаю, как применить это к моей проблеме, и добавление mp.release к одному из моих действий привело к появлению новой ошибки. Кто-нибудь знает решение? Мой звуковой файл составляет около 1,1 мегабайта и длится 1 секунду.Приложение для ношения одежды для Android только воспроизводит медиа 10 раз
Вот мой код:
public class MainActivity extends AppCompatActivity {
final MediaPlayer mp = new MediaPlayer();
//used to be final
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//start out with head up
setContentView(R.layout.activity_main);
ImageButton button1 = (ImageButton) findViewById(R.id.imageButton);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//handles audio
if (mp.isPlaying()) {
mp.stop();
}
//mp.release();
try {
mp.reset();
AssetFileDescriptor afd;
afd = getAssets().openFd("Coin_Flip_Sound.mp3");
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.prepare();
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
System.out.println("This is Hans and their is a Illegal State ");
} catch (IOException e) {
e.printStackTrace();
System.out.println("This is a IO Exception");
}
//generate random int
double flip = Math.random();
if (flip > .5) {
Intent intent = new Intent(v.getContext(), Back.class);
startActivityForResult(intent, 0);
}
}
});
Вот LogCat, когда я получаю сообщение об ошибке:
02-01 14:24:09.675 2061-2061/com.example.hansg17.watchflip I/Choreographer﹕ Skipped 200 frames! The application may be doing too much work on its main thread.
02-01 14:24:09.699 2061-2061/com.example.hansg17.watchflip D/gralloc_goldfish﹕ Emulator without GPU emulation detected.
02-01 14:24:48.601 2061-2061/com.example.hansg17.watchflip D/MediaPlayer﹕ setSubtitleAnchor in MediaPlayer
02-01 14:24:52.410 2061-2061/com.example.hansg17.watchflip D/MediaPlayer﹕ setSubtitleAnchor in MediaPlayer
02-01 14:24:53.249 2061-2061/com.example.hansg17.watchflip D/MediaPlayer﹕ setSubtitleAnchor in MediaPlayer
02-01 14:24:53.418 2061-2061/com.example.hansg17.watchflip D/MediaPlayer﹕ setSubtitleAnchor in MediaPlayer
02-01 14:24:53.631 2061-2061/com.example.hansg17.watchflip D/MediaPlayer﹕ setSubtitleAnchor in MediaPlayer
02-01 14:24:54.293 2061-2061/com.example.hansg17.watchflip I/Choreographer﹕ Skipped 240 frames! The application may be doing too much work on its main thread.
02-01 14:24:54.465 2061-2061/com.example.hansg17.watchflip D/MediaPlayer﹕ setSubtitleAnchor in MediaPlayer
02-01 14:24:55.135 2061-2061/com.example.hansg17.watchflip I/Choreographer﹕ Skipped 84 frames! The application may be doing too much work on its main thread.
02-01 14:24:55.400 2061-2061/com.example.hansg17.watchflip D/MediaPlayer﹕ setSubtitleAnchor in MediaPlayer
02-01 14:24:56.023 2061-2074/com.example.hansg17.watchflip E/MediaPlayer﹕ error (1, -19)
02-01 14:24:56.059 2061-2061/com.example.hansg17.watchflip E/MediaPlayer﹕ invoke failed: wrong state 0
02-01 14:24:56.059 2061-2061/com.example.hansg17.watchflip E/MediaPlayer﹕ Error (1,-19)
02-01 14:24:56.089 2061-2061/com.example.hansg17.watchflip E/MediaPlayer﹕ Error (1,-1010)
02-01 14:24:56.213 2061-2061/com.example.hansg17.watchflip D/MediaPlayer﹕ setSubtitleAnchor in MediaPlayer
02-01 14:24:56.473 2061-2073/com.example.hansg17.watchflip W/art﹕ Suspending all threads took: 5.220ms
02-01 14:24:56.782 2061-2459/com.example.hansg17.watchflip E/MediaPlayer﹕ error (1, -19)
02-01 14:24:56.787 2061-2061/com.example.hansg17.watchflip E/MediaPlayer﹕ invoke failed: wrong state 0
02-01 14:24:56.787 2061-2061/com.example.hansg17.watchflip E/MediaPlayer﹕ Error (1,-19)
02-01 14:24:56.788 2061-2061/com.example.hansg17.watchflip E/MediaPlayer﹕ Error (1,-1010)
Logcat после выключения:
02-01 14:18:56.884 961-2788/? E/AudioFlinger﹕ createTrack_l() initCheck failed -12; no control block?
02-01 14:18:56.884 961-2788/? E/AudioTrack﹕ AudioFlinger could not create track, status: -12
02-01 14:18:56.886 961-2788/? E/AudioSink﹕ Unable to create audio track
02-01 14:18:56.887 961-2788/? W/NuPlayerRenderer﹕ openAudioSink: non offloaded open failed status: -19
02-01 14:18:56.887 961-2786/? E/NuPlayer﹕ received error(0xffffffed) from audio decoder, flushing(0), now shutting down
02-01 14:18:56.887 961-2786/? D/NuPlayerDriver﹕ notifyListener_l(0xb619abc0), (100, 1, -19)
02-01 14:18:56.887 2004-2015/com.example.hansg17.watchflip E/MediaPlayer﹕ error (1, -19)
02-01 14:18:56.887 961-2788/? W/NuPlayerRenderer﹕ onDrainAudioQueue(): audio sink is not ready
02-01 14:18:56.888 961-2788/? W/NuPlayerRenderer﹕ onDrainAudioQueue(): audio sink is not ready
02-01 14:18:56.891 961-2789/? W/AMessage﹕ failed to post message as target looper for handler 0 is gone.
02-01 14:18:56.898 2004-2004/com.example.hansg17.watchflip E/MediaPlayer﹕ Error (1,-19)
02-01 14:18:56.927 1300-1319/system_process I/ActivityManager﹕ Displayed com.example.hansg17.watchflip/.Back: +56ms
02-01 14:18:57.389 1300-1319/system_process I/Choreographer﹕ Skipped 32 frames! The application may be doing too much work on its main thread.
02-01 14:18:57.460 1300-1319/system_process I/Choreographer﹕ Skipped 41 frames! The application may be doing too much work on its main thread.
02-01 14:18:57.526 1300-1319/system_process I/Choreographer﹕ Skipped 33 frames! The application may be doing too much work on its main thread.
Если вы хотите больше LogCat Спроси меня. Существует много.
Просто предложение, MediaPlayer не идеально подходит для коротких клипов, таких как флип для монет. См. Http://stackoverflow.com/questions/13883883 для примера кода с использованием SoundPoolPlayer, может быть лучшей альтернативой. – String
Я действительно не понимаю звуковой пул, и информации за пределами StackOverflow не так много – hgund