1

もう一度、私が提示された質問をあなたに返します。クラス サービスを拡張し、オーディオ再生用のクラス Runnable を実装するクラスがあります。プログレスバーを使用して、音楽の再生の進行状況を表示しています。run メソッドで、プログレスバーの値を更新するコードを追加します。問題ありませんが、曲を再生しているときに、前の曲を終了せずに別の曲にジャンプすると、以前に作成されたスレッドが破棄されません。助けてください。お願いします?

public class PlaySongService extends Service implements MediaPlayer.OnCompletionListener, Runnable {

public static MediaPlayer mediaPlayer = new MediaPlayer();
private ProgressBar pbSong;
private final String TAG = "PlaySongService";

@Override
public IBinder onBind(Intent intent) {
    return null;  //To change body of implemented methods use File | Settings | File Templates.
}

public void onCreate() {
    mediaPlayer.setOnCompletionListener(this);
    mediaPlayer.reset();
    pbSong = new WeakReference<ProgressBar>(Main.pbSong);
    super.onCreate();

}

....... /* Selected song in listview*/

private void playSong(int position) {
    try {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(my_file_selected_in_listview);
            mediaPlayer.prepare();
            mediaPlayer.start();
            pbSong.get().setProgress(0);
            pbSong.get().setMax(mediaPlayer.getDuration());
            new Thread(this).start();            
    } catch (Exception e) {
        Log.e(TAG,e.getMessage());
    }
}

@Override
public void run() {
    int currentPosition= 0;
    int total = mediaPlayer.getDuration();
    while (mediaPlayer!=null && currentPosition<total) {
        try {
            Thread.sleep(1000);
            currentPosition= mediaPlayer.getCurrentPosition();
            Log.i(TAG,Thread.currentThread().toString());
        } catch (InterruptedException e) {
            return;
        } catch (Exception e) {
            return;
        }
        pbSong.get().setProgress(currentPosition);
    }
}    

}

4

1 に答える 1