1

向きが縦向きから横向きに変わったときにメディアプレーヤーオブジェクトを保存したい。向きを変えるとアクティビティが再作成されるので、古いメディアプレーヤーオブジェクトが破棄されます。onretainNonConfigureInstanceメソッドを試しましたが、機能しません。

ランドスケープビューの古いメディアプレーヤーオブジェクトにfelixpalmerandroid-visualizerを表示させたい。Visualiserを表示するには、メディアプレーヤーオブジェクトをvisualiser-viewにリンクする必要があります。古いメディアプレーヤーオブジェクトをランドスケープビューに、またはその逆に渡す別の方法はありますか?

4

4 に答える 4

0

これを行う1つの方法は、のインスタンスを実装OnRetainNonRetainNonConfigurationInstance()して返すことですMediaPlayer。次に、onCreate()またはonStart()の間に、その結​​果を呼び出しgetLastNonConfigurationInstance()てMediaPlayer変数にキャストします。

ただし、このメソッドは非推奨であり、現在のドキュメントに従って、論理ブロックをにカプセル化しFragment、メソッドを使用しmFragment.setRetainInstance(true)て、フラグメントがその親アクティビティで再作成されないようにする必要があります。

3番目のオプションは、を使用してServiceをカプセル化することMediaPlayerです。アクティビティで再作成されることはなく、現在のアクティビティから独立しているため、再生が停止することはありません。

于 2013-02-05T17:37:38.927 に答える
0

これを試して、

このコードをあなたに追加してください。manifest.xmlそれはあなたの問題を解決します

  android:configChanges="keyboardHidden|orientation"
于 2013-02-05T14:00:47.697 に答える
0

おそらく、メディア プレーヤー オブジェクトをアクティビティ内の静的変数に保持して、向きが変わっても保持されるようにすることができます。

Android Visualizerコンポーネントを使用したことはありませんが、そのVisualizerViewクラスのソース コードを確認すると、Android のVisualizerクラスを使用していることがわかります。

メソッドのドキュメントでわかるようにsetCaptureSize、 が有効になっている間は呼び出すことができませんVisualizer

これは私があなたの使用パターンのためにやろうとしていることです:

オプション1

画面の向きが変わったときにクラスのrelease()メソッドを呼び出すと、Android のオブジェクトのメソッドも呼び出されるため、すべてのリソースが解放され、オブジェクトを呼び出して新しいリソースを作成して、メディア プレーヤーを再度リンクできます。VisualizerViewrelease()Visualizerlink()VisualizerView

オプション 2

この質問とその回答を見てください。VisualizerViewクラスのソース コードを変更して、新しいインスタンスの作成直後と呼び出しの前にメソッドmVisualizer.setEnabled(false)内に挿入することを試みることができます。link()VisualizersetCaptureSize

于 2013-02-05T15:31:46.207 に答える
0

Media Player をホストするフラグメントのretainInstance プロパティを true に設定できます。フラグメントの onCreate メソッドに次の行を追加するだけです。

于 2014-02-08T18:04:20.903 に答える