AndroidMediaPlayerシングルトン
-
27-10-2019 - |
質問
シングルトンコードを使用することを提案するいくつかの記事をここで読みました。ユーザーが定義したクリック数に関係なく、シングルトンコードを使用して1つのメディアプレーヤーインスタンスのみを許可したいので、これを読んでサウンドボードに配置しました。。
基本的には1つのサウンドだけが必要で、再生中にユーザーが別のボタンをクリックすると、現在のサウンドが停止し、押されたサウンドが再生されます。MediaPlayerインスタンスが1つだけ必要ですが、実装方法がわかりません。
これが私のコードの基本的な考え方です: ジェネラコディセタグプレ
これもコードを更新および変更する必要がありましたが、playresource()関数の受け渡しに問題があります。私はそれを間違って渡しているのでしょうか。
解決
そのためにシングルトンは必要ありません。あなたがしていることは、ファイルを再生するたびにcreateメソッドを呼び出すことです。MediaPlayerインスタンスがすでにあるので、それは間違っています。 MediaPlayer.createの実装。 私はそれをしたいです:
- 新しいメソッドplayResource(int j、int resource)を作成します
- すべての場合、R.id.btnXはメソッドplayResource(X、R.raw.Y)を呼び出します-XとYはbtnに依存します
playResourceメソッドの例: ジェネラコディセタグプレ
MediaPlayerが不要になった場合は、リリースする必要があります。たとえば、onPause()の呼び出し: ジェネラコディセタグプレ
テストしなかったため、エラーが発生する可能性があります。お役に立てば幸いです。
他のヒント
getSingletonObject()メソッドは、MediaPlayerのデフォルトコンストラクターを使用して(リソースを指定せずに)作成されたMediaPlayerのインスタンスを返す必要があります。
メインクラスのonCreate()からgetSingletonObject()を呼び出して、それを使用してプレーヤーを初期化できます。
後でonClick()で、player.prepare()を呼び出し、次にplayer.setDataSource()を呼び出して、リソースを渡す必要があります。
したがって、コードは次のようになります。 ジェネラコディセタグプレ
メインクラスのonCreate()メソッドで ジェネラコディセタグプレ
onClick()のコードを自分で理解できることを願っています。また、onClick()メソッドに適切なtry..catch句を追加することを忘れないでください。
これがお役に立てば幸いです!!
私は自分のプロジェクトのためにこの問題を解決しようとしています。2回目の再生中にアプリがクラッシュするのと同じ問題が発生しました。
player = new MediaPlayer();
を追加すると、問題が解決しました(try-catchブロックでメディアプレーヤーが開始されなかったようです)。
以下のコードを参照してください: ジェネラコディセタグプレ