Java 如何停止MediaPlayer流,然后重新启动它?安卓
我正在制作一个简单的应用程序来播放在线广播流。我知道如何设置这条小溪。这是到目前为止我的代码。它设置了一条流,并且播放得很好。但是如果我按了停止键,我就不能让它重新启动。我错过了什么明显的东西吗Java 如何停止MediaPlayer流,然后重新启动它?安卓,java,android,media-player,android-mediaplayer,Java,Android,Media Player,Android Mediaplayer,我正在制作一个简单的应用程序来播放在线广播流。我知道如何设置这条小溪。这是到目前为止我的代码。它设置了一条流,并且播放得很好。但是如果我按了停止键,我就不能让它重新启动。我错过了什么明显的东西吗 final MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataS
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();
}
}
调用
mediaPlayer.reset()
mediaPlayer
将进入空闲状态。
对于播放,您应该在开始之前进行初始化以准备
您可以在此处检查mediaplayer状态:
.而且您可能不需要
stop()
,pause()
可能就足够了,这意味着您可以在想要继续播放时调用play()
。试试这个
@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();
}
}
您必须在完成歌曲/播放歌曲时调用onDestroy()medthod。
你可以从我的实时代码中得到帮助
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;
}
}
}
}
我希望你能从上面的代码中得到帮助。请试着像这样使用。谢谢老问题,但我是在找这个的时候偶然发现的。重新启动前,只需使用暂停停止,然后使用seekTo(0):
mediaPlayer.seekTo(0);
mediaPlayer.start();
无需每次都重新准备录音机即可工作
mediaPlay.seek(0);
mediaPlay.pause();
对我来说没问题。我想我应该更清楚一些。我想停止流,然后在活动位置重新开始。OP想重新开始,而不是从停止的位置继续播放。根据记忆,只需重新开始。你不需要寻找,就像一个符咒!
public void playButton (View view){
if (isActive == false){
mediaPlayer.start();
isActive = true;
}else{
mediaPlayer.seekTo(0);
mediaPlayer.start();
}
}