จะหยุดสตรีม MediaPlayer แล้วรีสตาร์ทได้อย่างไร หุ่นยนต์

ฉันกำลังสร้างแอปง่ายๆ เพื่อเล่นสตรีมวิทยุออนไลน์ ฉันรู้วิธีการตั้งค่าสตรีม นี่คือรหัสของฉันจนถึงตอนนี้ มันตั้งค่าสตรีมและเล่นได้ดี แต่ถ้าฉันกดหยุด ฉันก็ไม่สามารถสตาร์ทใหม่ได้ ฉันพลาดบางสิ่งบางอย่างที่ชัดเจนไปหรือเปล่า?

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 แหล่งที่มา
comment
ฉันเดาว่าฉันควรจะชัดเจนกว่านี้ ฉันต้องการหยุดสตรีมแล้วรีสตาร์ทที่ตำแหน่งถ่ายทอดสด   -  person wilxjcherokee    schedule 19.09.2012


คำตอบ (6)


คำถามเก่า แต่ฉันเจอมันเพื่อค้นหาสิ่งนี้ เพียงใช้ Pause เพื่อหยุด ตามด้วย SeekTo(0) ก่อนรีสตาร์ท:

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

ทำงานได้โดยไม่ต้องเตรียมเครื่องบันทึกใหม่ทุกครั้ง

person David    schedule 14.11.2015
comment
จากความทรงจำ เพียงแค่เริ่มต้นใหม่อีกครั้ง คุณไม่จำเป็นต้องแสวงหา - person David; 14.04.2016

เมื่อคุณโทร mediaPlayer.reset() mediaPlayer จะเข้าสู่สถานะ IDLE สำหรับการเล่น คุณควรเตรียมใช้งานเพื่อเตรียมพร้อมก่อนเริ่มเล่น

คุณสามารถตรวจสอบสถานะของ MediaPlayer ได้ที่นี่: 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();
        }
    }

ทำงานได้ดีกับฉัน

person David Kamal    schedule 14.07.2017
comment
ทำงานเหมือนมีเสน่ห์! - person Antonio Vlasic; 13.09.2018

ลองสิ่งนี้

@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

คุณจะต้องถูกเรียก onDestroy() เมื่อเล่นเพลง / เล่นเพลงเสร็จแล้ว คุณได้รับความช่วยเหลือจากรหัสเรียลไทม์ของฉัน

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;
            }

        }
    }

}

ฉันคาดหวังว่าคุณจะได้รับประโยชน์จากโค้ดด้านบน โปรดลองใช้แบบนี้ ขอบคุณ

person Community    schedule 13.12.2014

นอกจากนี้คุณไม่จำเป็นต้อง stop() เพราะ pause() น่าจะเพียงพอแล้ว ซึ่งหมายความว่าคุณสามารถโทร play() ได้เมื่อคุณต้องการเล่นต่อ

person StackOverflowed    schedule 08.11.2012
comment
OP ต้องการเริ่มต้นใหม่ ไม่ใช่เล่นต่อจากที่ค้างไว้ - person abalter; 01.06.2014