2

MediaPlayerをバックグラウンドで使用してビデオを再生したいので、ユーザーが私のアプリを離れても音声が聞こえ、アプリに戻ったときにビデオが表示されます。MediaPlayerを再生するサービスで最初の部分を実行できましたが、2番目の部分で問題が発生します。アプリを終了して戻ると、SurfaceViewにビデオが表示されません。

ユーザーが戻ってきたときに、新しいSurfaceを作成したので、これを試しました。

public void surfaceCreated(SurfaceHolder holder) {
    if(mService!=null && mService.player.isPlaying()){          
        try {
            mService.player.setDisplay(holder);
            mService.player.prepare();
            mService.player.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }       
}

私のサービスであり、彼mServiceはMediaPlayerを保持していますplayer

私の研究では、この投稿を見ました: Androidでビデオ再生アクティビティに戻ったときの黒い画面

しかし、これは1年前に投稿されたので、誰かが別の新しい答えを持っているかもしれません。

編集:ビデオがストリーミングされていると言うのを忘れたので、リセットは良いオプションではありません(私は試しました:))。

SurfaceViewをサービスに保存し、ユーザーが戻ってビューを取得して現在のレイアウトに動的に追加することは可能ですか?

4

1 に答える 1

0

アクティビティを初めて起動するとき: onResume()->onSurfaceCreated()->onSurfaceChanged()。
アクティビティを離れるとき: onPause()->onSurfaceDestroyed()

したがって、アプリを終了すると、サーフェスは自動的に破棄され、サービス中にサーフェス ビューを保存することもできなくなります。ビデオをもう一度表示したい場合は、ホーム画面またはロック画面が押された場合に備えて
、surfaceview と holder コールバックを再度作成する必要があります。onStart

surfaceView = (SurfaceView) findViewById(R.id.surfaceView);

holder = surfaceView.getHolder();
holder.setFixedSize(800, 480);
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
于 2014-05-20T08:31:47.870 に答える