8

とにかく、構成の変更を手動で処理せずに、オリエンテーション後にアプリケーションがバッファーを保持できるようにすることはできますか?

シナリオは基本的に:

  1. 向きが変わったときに、最新の時点までのビデオ バッファを保持する必要があります。

  2. 新しいレイアウトをリロードする必要があります (portait と lanscape のレイアウトが異なるため)。したがって、アプリにアクティビティを再起動させて新しいリソースをリロードさせるのが最善の方法だと思います。

  3. ビデオ コンポーネントはフラグメントにあります。

私が試したが受け入れられない代替案:

  1. 最初の回避策は、ビデオの位置を保存し、ビューが作成された後、seekTo を使用して最後のポイントに移動することです。ただし、これにより、デバイスが再度バッファリングされます。

  2. フラグメント setRetainInstance(true) をいじってみましたが、向きが変わった後にメディア プレーヤーが再初期化されないようにしました。各 onCreateView の後、mediaplayer.setDisplay() を新しいサーフェスホルダーに設定するだけです。残念ながら、これによりメディア プレーヤーがエラー状態になり、メディア プレーヤーをリセットする必要があります。

これに対する提案/回避策はありますか?

編集: Android 4.0以降でメディアプレーヤーがアクティブなときにメディアプレーヤーのサーフェスホルダーを変更できることをstackoverflowのどこかで見ました。ただし、Android 3.x 用のアプリを開発しています。

4

3 に答える 3

0

あなたにとっては遅いかもしれませんが、同じ問題に直面している他の人がいる可能性があります。2 番目のオプションを使用できます。フラグメントのビューを破棄する前に MediaPlayer の表示を null に設定しないと、再度 mediaplayer にアクセスするとエラー状態になります。私の解決策は、サーフェスホルダーの surfaceCreated および surfaceDestroyed イベントを実装することでした。

@Override
public void surfaceCreated(SurfaceHolder holder) {
    mediaPlayer.setDisplay(holder);
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    mediaPlayer.setDisplay(null);
}
于 2013-08-30T14:43:39.163 に答える
0

onConfigurationChanged() をオーバーライドして、プログラムで再レイアウトできると思います。

ビデオに触れずにレイアウトを変更できます。

于 2012-05-21T03:29:33.260 に答える