Bagaimana cara menghentikan streaming MediaPlayer dan memulainya kembali? Android

Saya membuat aplikasi sederhana untuk memutar aliran radio online. Saya tahu cara mengatur streaming. Ini kode saya sejauh ini. Ini mengatur aliran dan memutarnya dengan baik. Namun jika saya menekan tombol stop, saya tidak dapat memulainya lagi. Apakah saya melewatkan sesuatu yang jelas?

final MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.setDataSource(url);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        mediaPlayer.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // might take long! (for buffering, etc)

   streamButton = (ToggleButton) findViewById(R.id.playstopstream);

   streamButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton arg0, final boolean isChecked) {
        // TODO Auto-generated method stub
         new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                if(isChecked)
                {


                    mediaPlayer.start();

                }
                else
                {
                    mediaPlayer.stop();
                    mediaPlayer.reset();



                }
            }

person wilxjcherokee    schedule 19.09.2012    source sumber
comment
Saya kira saya harus lebih jelas. Saya ingin menghentikan streaming dan memulai kembali pada posisi live.   -  person wilxjcherokee    schedule 19.09.2012


Jawaban (6)


Pertanyaan lama, tapi saya menemukannya mencari ini. Cukup gunakan jeda untuk berhenti, diikuti dengan seekTo(0) sebelum memulai kembali:

mediaPlayer.seekTo(0);
mediaPlayer.start();

Bekerja tanpa harus menyiapkan perekam lagi setiap saat.

person David    schedule 14.11.2015
comment
Dari ingatan, mulai saja lagi. Anda tidak perlu mencari. - person David; 14.04.2016

Saat Anda menelepon mediaPlayer.reset() mediaPlayer masuk ke status IDLE. Untuk pemutaran, Anda harus melakukan inisialisasi untuk persiapan sebelum memulai.

Anda dapat memeriksa status pemutar media di sini: http://developer.android.com/reference/android/media/MediaPlayer.html.

person user1677038    schedule 19.09.2012

public void playButton (View view){

        if (isActive == false){
            mediaPlayer.start();
            isActive = true;
        }else{
            mediaPlayer.seekTo(0);
            mediaPlayer.start();
        }
    }

Bekerja baik-baik saja dengan saya.

person David Kamal    schedule 14.07.2017
comment
Bekerja seperti pesona! - person Antonio Vlasic; 13.09.2018

Coba ini

@Override
public void onCheckedChanged(CompoundButton arg0, final boolean isChecked) {
    // TODO Auto-generated method stub
     new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            if(isChecked) {
                mediaPlayer.setDataSource(url);
                mediaPlayer.prepare();
                mediaPlayer.start();
            }
            else {
                mediaPlayer.stop();
                mediaPlayer.reset();
            }
        }
person Munawir    schedule 10.02.2014

Anda harus memanggil metode onDestroy() ketika Anda selesai menyanyikan/memutar lagu. Anda mendapatkan bantuan dari kode waktu nyata saya.

public class RingtonePlayingService extends Service {
    public static MediaPlayer mediaPlayer;
    public static Context context;

    @SuppressWarnings("deprecation")
    @Override
    public void onCreate() {
        super.onCreate();

        context = getApplicationContext();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
            mediaPlayer = new MediaPlayer();
            // this is important.
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);

            try {
                // Uri ringerUri = RingtoneManager.getActualDefaultRingtoneUri(
                // getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
                mediaPlayer.setDataSource(context,
                        Settings.System.DEFAULT_RINGTONE_URI);
                // mediaPlayer.setDataSource(context, ringerUri);

                mediaPlayer.setLooping(true);
                mediaPlayer.prepare();
                if (SettingsManager.getInstance(context).getFinishCall()) {

                } else {
                    mediaPlayer.start();
                }

            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        return START_NOT_STICKY;
    }


    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        TTcall.onDestroyr();
        if (mediaPlayer != null) {

            if (mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
                mediaPlayer.stop();
                mediaPlayer = null;
            }

        }
    }

}

Saya berharap Anda akan mendapat manfaat dari kode di atas. silakan coba gunakan seperti ini. Terima kasih

person Community    schedule 13.12.2014

Anda juga mungkin tidak perlu stop(), pause() mungkin sudah cukup, artinya Anda dapat menelepon play() setelah ingin terus bermain.

person StackOverflowed    schedule 08.11.2012
comment
OP ingin memulai dari awal, bukan terus bermain dari bagian terakhirnya. - person abalter; 01.06.2014