Android 媒体播放器延迟启动
我的媒体播放器在闲置一段时间后延迟启动,也有一段时间不播放音频 前面我使用了setDataSource,但这次我使用的是create 这是我正在使用的代码,仅供参考:Android 媒体播放器延迟启动,android,android-mediaplayer,media,Android,Android Mediaplayer,Media,我的媒体播放器在闲置一段时间后延迟启动,也有一段时间不播放音频 前面我使用了setDataSource,但这次我使用的是create 这是我正在使用的代码,仅供参考: AssetFileDescriptor afd = _context.getResources().openRawResourceFd(this._soundResource.get(this._toBePlayed)); mp = new MediaPlayer(); mp.setDataSour
AssetFileDescriptor afd = _context.getResources().openRawResourceFd(this._soundResource.get(this._toBePlayed));
mp = new MediaPlayer();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mp.setOnPreparedListener(new OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mp.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
mp.release();
}
});
mp.prepareAsync();
我使用FileInputStream。您没有设置AudioStreamType。下面是我如何设置MediaPlayer的
public void setupMediaPlayer(){
mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
fis = new FileInputStream(tempFilePath);
mp.setDataSource(fis.getFD());
mp.prepare();
mp.setOnPreparedListener(this);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
tempFilePath是文件的路径
我还在这个类中实现了setOnPreparedListener,这使您的代码在我看来更具可读性
还有一个很好的参考链接:我使用FileInputStream。您没有设置AudioStreamType。下面是我如何设置MediaPlayer的
public void setupMediaPlayer(){
mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
fis = new FileInputStream(tempFilePath);
mp.setDataSource(fis.getFD());
mp.prepare();
mp.setOnPreparedListener(this);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
tempFilePath是文件的路径
我还在这个类中实现了setOnPreparedListener,这使您的代码在我看来更具可读性
还有一个很好的参考链接:我想如果你愿意改变的话
mp.prepareAsync();
到
放
mp.start();
下院议员之后准备;你的代码会工作的。试试看。我想如果你愿意改变的话
mp.prepareAsync();
到
放
mp.start();
下院议员之后准备;你的代码会工作的。试试看。我也有启动延迟的问题。我用onPrepared中的mp.seekTo0修复了它,如下所示:
mp.setOnPreparedListener(new OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mp) {
mp.seekTo(0);
mp.start();
}
});
我也有启动延迟的问题。我用onPrepared中的mp.seekTo0修复了它,如下所示:
mp.setOnPreparedListener(new OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mp) {
mp.seekTo(0);
mp.start();
}
});
这并不能解决问题。相反,这会阻塞主线程。对UI/UX来说非常糟糕。这并不能解决问题。相反,这会阻塞主线程。对UI/UX来说非常糟糕。为什么这会解决问题?MediaPlayer默认值为0,因此您所做的只是添加一个额外的方法调用。您是对的,它默认值为0,但此修复仍然对我有效。为什么这样可以解决问题?MediaPlayer默认为0,因此您所做的只是添加一个额外的方法调用。您是对的,它默认为0,但此修复程序对我仍然有效。对于现在发现此问题的任何人,从API 26开始,setAudioStreamType现在都不推荐,而setAudioAttributes是首选。对于现在发现这一点的任何人来说,从API 26开始,setAudioStreamType现在是不推荐的,而setAudioAttributes则是首选。