ユーザーがフラグメントを離れたときの位置とファイルにオーディオを復元しようとしています。これを行うために、オーディオ ファイルの場所と、ユーザーが離れたときにオーディオが再生されていたかどうかのブール値と共に、個人設定を使用してシーク位置を保存します。この情報は最初に onPause() に保存します。
再開するときは、ビューなどを初期化し、onResume で最後に行うことは、個人設定から読み取られ、そこに保存されている適切なオーディオを再生することです。
ただし、onResume から再生しようとすると、メディア完了リスナーがすぐに呼び出され、ファイルがスキップされます。
私はテストを実行しており、メディア プレーヤーに適切なデータが渡され、正しく準備され、再生できるように設定されていることがわかっています。
オーディオを再生しようとしている方法は、ユーザーが手動でクリックしてオーディオを再生する場合と同じ方法であり、問題なく動作します。
ユーザーが離れた場所にオーディオを「復元」しようとした場合にのみ、完了リスナーがすぐに呼び出されます。
誰もこれを見たことがありますか?
public void setAudioURLAndPLay(Context context, String url)
{
Log.d(TAG, "setAudioURLAndPLay");
CacheQueue.getInstance().addImmediateTaskToQueue(CacheQueue.AUDIO_TASK, context, url, 0, handler);
}
private void playCahcedFile(String location)
{
Log.d(TAG, "playCahcedFile");
try
{
this.reset();
this.setAudioStreamType(AudioManager.STREAM_MUSIC);
this.setDataSource(location);
this.setOnPreparedListener(new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
setPlay();
}
});
this.prepareAsync();
}
catch (Exception e)
{
Log.d(TAG, "Exception", e);
}
}
public void setPlay()
{
Log.d(TAG, "setPlay");
this.start();
this.setProgressHandler(this.listener);
}
および通話が行われている場所
public void initializeFromResume()
{
PersonalPrefs prefs = new PersonalPrefs(getActivity());
if (!prefs.isPLaying())
{
return;
}
else
{
playNewAudio(prefs.getURL());
// ((ActivityMain) getActivity()).getMediaManager().setSeek(prefs.getSeek());
}
}
private void playNewAudio(String url)
{
getMediaManager().setAudioURLAndPLay(getActivity(), url)
mediaState = MediaState.playing;
initializeSeekBar();
getMediaManager().setOnCompletionListener(this);
mediaController.togglePlayButton(mediaState);
}