我想检查MediaPlayer是否已发布 - 如何检查?我发现isPlaying生成异常而不是false - 如何以简单的方式执行它很复杂.
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mediaPlayer.release();
}
});
Run Code Online (Sandbox Code Playgroud)
我不认为通过MediaPlayer类本身可以做到这一点.
最简单的事情是true在创建和重置时设置的全局变量.它将false在发布时设置.
boolean mIsPlayerRelease = true;
mediaPlayer = MediaPlayer.create(myContext, soundId); // ready to play
mIsPlayerRelease = false;
....
mediaPlayer.reset(); // ready to play again
mIsPlayerRelease = false;
....
mediaPlayer.release(); // can't be played until release.
mIsPlayerRelease = true;
Run Code Online (Sandbox Code Playgroud)
编辑:
您可以通过将创建置于a AsyncTask并在完成时设置变量来修复阻塞问题.
private class MediaCreator extends AsyncTask<Integer, Void, Boolean> {
WeakReference<Context> mCtx;
public MediaCreator(Context ctx) {
mCtx = new WeakReference(ctx);
}
@Override
protected Boolean doInBackgroind(Integer.... params) {
final Context ctx = mCtx.get();
if(ctx == null || params == null || params.length == 0) {
return false;
}
mediaPlayer = MediaPlayer.create(ctx, params[0];
}
@Override
protected void onPostExecute(Boolean success) {
if(success) {
mIsPlayerRelease = false;
} else {
mIsPlayerRelease = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将此类放在任何正在处理的类中mediaPlayer.启动它
MediaCreator creator = new MediaCreator(myContext);
creator.execute(R.id.mySoundId);
Run Code Online (Sandbox Code Playgroud)
该方法doInBackground将在单独的线程上创建和缓冲媒体播放器.它将在创建后返回,onPostExecute()并将在主线程上调用,false如果创建了播放器,则将布尔值设置为.
| 归档时间: |
|
| 查看次数: |
3771 次 |
| 最近记录: |