首页 > 解决方案 > 当我按下停止按钮或搜索栏到达末尾时,此应用程序停止工作

问题描述

这是一个播放音频文件的简单应用程序。一切都很好,但是当我按下停止按钮或搜索栏到达末尾时出现一个问题我的应用程序停止工作

注意:在我将搜索栏与媒体播放器连接之前,一切正常

这是我的代码:

public class SongActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer = null;
    private SongInfo song;
    private AudioManager mAudioManager;
    private int AudioFocusRequest;
    private int ProgressValue;
    private SeekBar seekBar;
    private Handler mSeekbarUpdateHandler = new Handler();


    // AudioManager Focus change Listener ---------------------------------------------------------------------------------------
    private AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
        @Override
        public void onAudioFocusChange(int focusChange) {
            if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
                mediaPlayer.start();
            } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
                mediaPlayer.pause();
                releaseMediaplayer();
            } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
                mediaPlayer.pause();
            }
        }
    };
    // SeekBar Change Listener ------------------------------------------------------------------------------------------------
    private SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (fromUser) {
                ProgressValue = progress;
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            if (mediaPlayer != null) {
                mediaPlayer.pause();
            }
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            if (mediaPlayer != null) {
                mediaPlayer.seekTo(ProgressValue);
            } else {
                Toast.makeText(SongActivity.this, "اختار السوره اولا ", Toast.LENGTH_SHORT).show();
            }
        }
    };

    //seekBar handler-------------------------------------------------------------------------------
    private Runnable mUpdateSeekbar = new Runnable() {
        @Override
        public void run() {
            seekBar.setProgress(mediaPlayer.getCurrentPosition());
            mSeekbarUpdateHandler.postDelayed(this, 50);
        }
    };

    //----------------------------------------------------------------------------------------------------------------------------------
    @Override
    protected void onStop() {
        super.onStop();
        releaseMediaplayer();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mediaPlayer.pause();
    }


    // MediaPlayer On completion Listener ----------------------------------------------------------------------------------------------
    private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            Toast.makeText(SongActivity.this, " السوره انتهت  ", Toast.LENGTH_SHORT).show();
            releaseMediaplayer();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

        seekBar = (SeekBar) findViewById(R.id.seek_bar);
        seekBar.setOnSeekBarChangeListener(onSeekBarChangeListener);


        final ArrayList<SongInfo> songList = new ArrayList<SongInfo>();

        songList.add(new SongInfo("الفاتحه", "مشارى العفاسى", R.raw.fatha));
        songList.add(new SongInfo("العصر", "مشارى العفاسى", R.raw.elasr));
        songList.add(new SongInfo("الاخلاص", "مشارى العفاسى", R.raw.elekhlas));
        songList.add(new SongInfo("الفلق", "مشارى العفاسى", R.raw.elfalaq));
        songList.add(new SongInfo("الفيل", "مشارى العفاسى", R.raw.elfel));
        songList.add(new SongInfo("الهمزه", "مشارى العفاسى", R.raw.elhamza));
        songList.add(new SongInfo("الكافرون", "مشارى العفاسى", R.raw.elkaferon));
        songList.add(new SongInfo("الكوثر", "مشارى العفاسى", R.raw.elkawsr));
        songList.add(new SongInfo("قريش", "مشارى العفاسى", R.raw.qurish));
        songList.add(new SongInfo("المسد", "مشارى العفاسى", R.raw.elmasad));
        songList.add(new SongInfo("الماعون", "مشارى العفاسى", R.raw.elmaaon));
        songList.add(new SongInfo("الناس", "مشارى العفاسى", R.raw.elnas));
        songList.add(new SongInfo("النصر", "مشارى العفاسى", R.raw.elnasr));

        ListView listView = (ListView) findViewById(R.id.list_view);
        SongAdapter songAdapter = new SongAdapter(SongActivity.this, songList);
        listView.setAdapter(songAdapter);


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                song = songList.get(position);

                AudioFocusRequest = mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

                if (AudioFocusRequest == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
                    releaseMediaplayer();
                    mediaPlayer = MediaPlayer.create(SongActivity.this, song.getSongResource());
                    seekBar.setMax(mediaPlayer.getDuration());
                    mSeekbarUpdateHandler.postDelayed(mUpdateSeekbar,0);
                    mediaPlayer.start();
                    mediaPlayer.setOnCompletionListener(onCompletionListener);
                }
            }
        });

        Button startButton = (Button) findViewById(R.id.start_button);
        startButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AudioFocusRequest = mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

                if (AudioFocusRequest == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
                    if (mediaPlayer != null) {
                        mediaPlayer.start();
                        mediaPlayer.setOnCompletionListener(onCompletionListener);
                    } else {
                        /*mediaPlayer = MediaPlayer.create(SongActivity.this, R.raw.fatha);
                        seekBar.setMax(mediaPlayer.getDuration());
                        mSeekbarUpdateHandler.postDelayed(mUpdateSeekbar,0);
                        mediaPlayer.start();
                        mediaPlayer.setOnCompletionListener(onCompletionListener);*/
                        Toast.makeText(SongActivity.this, "لتشغيل السوره التى تريدها اضغط عليها ", Toast.LENGTH_SHORT).show();

                    }
                }
            }
        });

        Button pauseButton = (Button) findViewById(R.id.pause_button);
        pauseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mediaPlayer != null) {
                    mediaPlayer.pause();
                }
            }
        });

        Button stopButton = (Button) findViewById(R.id.stop_button);
        stopButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mediaPlayer != null) {
                    mSeekbarUpdateHandler.removeCallbacks(mUpdateSeekbar);
                    releaseMediaplayer();
                }
            }
        });

    }

    private void releaseMediaplayer() {
        if (mediaPlayer != null) {
            mediaPlayer.pause();
            mediaPlayer.release();
            mAudioManager.abandonAudioFocus(onAudioFocusChangeListener);
        }
    }
} 

标签: androidandroid-mediaplayerseekbar

解决方案


推荐阅读