0

ユーザーがフラグメントを離れたときの位置とファイルにオーディオを復元しようとしています。これを行うために、オーディオ ファイルの場所と、ユーザーが離れたときにオーディオが再生されていたかどうかのブール値と共に、個人設定を使用してシーク位置を保存します。この情報は最初に 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);

}
4

1 に答える 1

0

私はそれを理解し、将来同様の問題を抱えている人に答えを投稿します. 遅れて投稿を実行するだけです。まったく驚くべきことではありませんが、うまくいきます。

        h.postDelayed(new Runnable()
        {

            @Override
            public void run()
            {
                PersonalPrefs prefs = new PersonalPrefs(getActivity());
                playNewAudio(prefs.getURL());
            }
        }, 1000);
于 2013-06-05T17:59:46.777 に答える