遷移先から戻ってくると、BGMが重ねがけ(重複再生)されてしまう件☆

798 views
Skip to first unread message

P

unread,
Aug 10, 2011, 4:32:33 AM8/10/11
to 日本Androidの会
いろいろと試してみましたが、メインの画面に戻る度に、BGMが新規に再生されてしまい、音楽が何重にも再生される状況です。
重ねがけさせない方法を教えてください!

アプリ終了まで、1つの曲をループ再生するのが目的です。

よろしくお願いします。
遷移先には、音楽の設定(MediaPlayer)は、特にしていません。
メインページの音楽(mediaplayer)の設定コードです↓

public class Bgm extends Activity {


private MediaPlayer mediaPlayer;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setVolumeControlStream(AudioManager.STREAM_MUSIC);

requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);

//MediaPlayerを生成
mediaPlayer = MediaPlayer.create(this, R.raw.bgm1);
//ループ再生を有効化する
mediaPlayer.setLooping(true);
//再生を開始する
mediaPlayer.start();

//アクティビティ終了時に呼び出される
protected void onDestroy() {
super.onDestroy();

soundPool.release();

//MediaPlayerを停止する
mediaPlayer.stop();
//MediaPlayerを開放する
mediaPlayer.release();
}
}

yoshiyuki kanno

unread,
Aug 10, 2011, 10:08:32 AM8/10/11
to android-g...@googlegroups.com
菅野です。

アプリのlaunchモードがデフォルトだと、複数のActivityインスタンスが作成されるので、
onCreateのたびに新規に再生されてしまう状況になっているのだと思います。

というわけで、
解決法としてはいくつかあると思います。

1.当該アクティビティのlaunchモードを"singleInstance"にする
2.mediaPlayerをstaticなシングルトンオブジェクトにして、onCreate時にisPlaying()メソッドを呼び出して、再生されていたら何もしないようにする
3・MediaPlayerによる再生ロジックをService化して、Activityのライフサイクルと音楽再生状態を切り離して管理する

一番お手軽なのは「1」ですが、「3」が理想的です。
「3」で実装する場合は、プリインストールされている音楽プレイヤーが参考になります。
http://android.git.kernel.org/?p=platform/packages/apps/Music.git;a=tree;hb=HEAD

2011年8月10日17:32 P <h.m.090...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

--
Stoic Corp.
CEO Yoshiyuki Kanno
web: http://www.stoic.co.jp/
mailto:yoshiyu...@stoic.co.jp

P

unread,
Aug 10, 2011, 3:10:35 PM8/10/11
to 日本Androidの会
返信ありがとうございます。
2の解決方法だと思うんですが、

private static MediaPlayer mediaPlayer; を作り、下のif文で解決できました♪


if( mediaPlayer == null) {

//MediaPlayerを生成
mediaPlayer = MediaPlayer.create(this, R.raw.bgm1);
//ループ再生を有効化する
mediaPlayer.setLooping(true);
//再生を開始する
mediaPlayer.start();

}

みなさま、ありがとうございました!!
Reply all
Reply to author
Forward
0 new messages