0

私はさまざまなアプローチを試みましたが、何も私の問題を解決していません。ここの誰かが私を助けてくれることを願っています。簡単な要件は、メディア プレーヤー ウィンドウが表示されるまでスピナーを表示することです。簡単に聞こえますが、そうではありません。

alertDialog の「リッスン」をクリックして、メディアプレーヤー クラスを呼び出しています。ここにあります:

alertBox.setCancelable(false)
  .setNegativeButton("Listen", new DialogInterface.OnClickListener(){
   public void onClick(DialogInterface dialog,int id){
dialog.dismiss();
emp = new EasyMediaPlayer(mp3PopupLayout,buttonPlayPause,seekBarProgress,tv_mp3,downloadURL);
emp.startPlayingMP3();          
}
}).show();

そして、startPlaying 関数は chooseToStart(true) を呼び出します。これにより、メディア プレーヤーが実行されます。このクラスは次のとおりです。

public class EasyMediaPlayer implements OnClickListener, OnTouchListener, OnCompletionListener, OnBufferingUpdateListener{  
EasyMediaPlayer(View mp3PopupLayout,ImageView buttonPlayPause,SeekBar seekBarProgress,TextView tv_mp3, String MP3URL){
        this.mp3PopupLayout = mp3PopupLayout;
        this.buttonPlayPause = buttonPlayPause;
        this.seekBarProgress = seekBarProgress;
        this.tv_mp3 = tv_mp3;
        this.MP3URL = MP3URL;
        seekBarProgress.setOnTouchListener(this);
        buttonPlayPause.setOnClickListener(this);
    }

    public void startPlayingMP3(){
        mediaFileLengthInMilliseconds = 1;
        tv_mp3.setText("");
        buttonPlayPause.setImageResource(R.drawable.button_play);
        buttonPlayPause.setVisibility(View.GONE);
        seekBarProgress.setProgress(0);
        seekBarProgress.setSecondaryProgress(0);
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setOnBufferingUpdateListener(this);
        mediaPlayer.setOnCompletionListener(this);
        mediaPlayer.setOnErrorListener(new OnErrorListener() {
            public boolean onError(MediaPlayer mp, int what, int extra) {
                tv_mp3.setText("Error in playing file !!");
                return true;
            }
        });
        mp3DownloadWindow = new PopupWindow(mp3PopupLayout, LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, true);
        mp3DownloadWindow.showAtLocation(mp3PopupLayout, Gravity.BOTTOM, 30, 0);
        chooseToStart(true);
    }

    public void chooseToStart(boolean startFlag){
        if(startFlag){
            try {
                mediaPlayer.setDataSource(this.MP3URL);
                mediaPlayer.prepare(); // you must call this method after setup the datasource in setDataSource method. After calling prepare() the instance of MediaPlayer starts load data from URL to internal buffer. 
                mediaFileLengthInMilliseconds = mediaPlayer.getDuration(); // gets the song length in milliseconds from URL
            } catch (Exception e) {
                tv_mp3.setText(e.toString() + "\nClose it");
            }

            if(!mediaPlayer.isPlaying()){
                spinner.cancel();
                mediaPlayer.start();
                buttonPlayPause.setImageResource(R.drawable.button_pause);
            }else {
                mediaPlayer.pause();
                buttonPlayPause.setImageResource(R.drawable.button_play);
            }
            primarySeekBarProgressUpdater();
        }
    }
//other stuff
}

メディア プレーヤーの再生が開始されるまでスピナーが表示されるように、どこでどのようにスピナーを使用できるかを知る必要があります。

どんな助けでも大歓迎です。ありがとう

4

1 に答える 1