SoundPool не воспроизводится после 25-го запуска активности

Я реализовал звуковой пул для воспроизведения короткого звука при запуске приложения, но по какой-то странной причине он перестает воспроизводить звук после того, как я открываю свое приложение, например, 24-й или 25-й раз. такие же результаты с медиаплеером. но когда он останавливается после 25-го запуска, и я удаляю его из своих последних приложений, он снова начинает работать, поэтому я решил исключить свое приложение из списка последних приложений, но проблема остается. любые подсказки?

    public class MainActivity extends Activity {

    Handler mHandler; // global instance
    Runnable your_runnable; // global instance
    private SoundPool soundPool;
    private int soundID;
    boolean loaded = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//Keep screen Always ON    
        //final MediaPlayer mp1 = MediaPlayer.create(getBaseContext(), R.raw.a); // -<play mp3

        //mp1.start();
        mHandler = new Handler();
        //your_runnable = new Runnable() {

            //@Override
            //public void run() {
                //Intent startActivity = new Intent(MainActivity.this,
                //      Activity_2.class); // -<start this activity after 3sec
            //  startActivity(startActivity);
                //overridePendingTransition(R.anim.fadeout, R.anim.fix);//play animation
            //  finish();
            //}

        //};

        mHandler.postDelayed(your_runnable, 3000L);//3sec timer

        // Set the hardware buttons to control the music
                this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
                // Load the sound
                soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
                soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
                    @Override
                    public void onLoadComplete(SoundPool soundPool, int sampleId,
                            int status) {
                        loaded = true;
            }
                });
                soundID = soundPool.load(this, R.raw.a, 1);

            }

    public void onWindowFocusChanged(boolean paramBoolean){//OnCreate Alternate 
        if (paramBoolean){

            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
              @Override
              public void run() {

                    // Getting the user sound settings
                    AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
                    float actualVolume = (float) audioManager
                            .getStreamVolume(AudioManager.STREAM_MUSIC);
                    float maxVolume = (float) audioManager
                            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                    float volume = actualVolume / maxVolume;
                    // Is the sound loaded already?
                    //if (loaded) {
                        soundPool.play(soundID, volume, volume, 1, 0, 1f);
                        Log.e("Test", "Played sound");
                    }}

          //}  
        ,500);} // 5 minutes delay before execute run()


    }

    //public void back(View view) {
        //mHandler.removeCallbacks(your_runnable);//finishes timer activity before launching new activity
        //Intent intent = new Intent(this, Mod_1_1AtoZ.class);
        //startActivity(intent);
        //overridePendingTransition(R.anim.slide_left_to_right_1,
        //      R.anim.slide_left_to_right_2);
        //finish();
    //}

    //@Override
    //public void onBackPressed() {
        // TODO Auto-generated method stub
    //}

}

person JRE.exe    schedule 05.09.2014    source источник
comment
Используйте функцию, аналогичную mHandler.postDelayed(your_runnable, 3000L);//3sec timer, которую вы уже использовали в своем коде.   -  person Nishanthi Grashia    schedule 05.09.2014


Ответы (1)


просто поместите код воспроизведения звука в onLoadComplete.

public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
    loaded = true;
    soundPool.play(soundID, volume, volume, 1, 0, 1f);
}

Код будет выполнен, когда SoundPool завершит загрузку звука, поэтому вам не нужно реализовывать какие-либо пользовательские задержки.

person cliffroot    schedule 05.09.2014
comment
если (загружено) { soundPool.play (soundID, громкость, громкость, 1, 0, 1f); - person JRE.exe; 05.09.2014