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;
編集:
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;
}
}
}
このクラスは、処理しているクラスに配置できますmediaPlayer
。から始めましょう
MediaCreator creator = new MediaCreator(myContext);
creator.execute(R.id.mySoundId);
このメソッドdoInBackground
は、別のスレッドでメディア プレーヤーを作成してバッファリングします。作成されると返され、プレーヤーが作成された場合にonPostExecute()
ブール値を設定するメインスレッドで呼び出されます。false