Work Records

日々の作業記録です。ソフトウェアエンジニアリング全般から、趣味の話まで。

androidでBGM再生

AdnroidでMedia PlayerでBGMを再生して色々とはまったので、めも。

mp3だとloop再生が切れる
こんな感じで、loopさせてみたものの、
mp3だとloopの間に若干時間が空いてしまう。
oggだと間隔空かずにしっかりloopしてくれるみたい。


MediaPlayer mp;
mp = MediaPlayer.create(this, R.raw.sample);
mp.setLooping(true);

Activityが変わっても再生続ける
intentでactivityを切り替えていくときに、
いちいち音楽が切れたりしないように、
各activityで同じ音楽を操作できるようにする。

こんな感じで、Activityを継承したclassを作って、
onCreateでmpを作成。
各ActivityはこのExtActivityを継承すれば、みんなこの音楽を操作できる。


public class ExtActivity extends Activity {

static protected MediaPlayer mp;

@Override
public void onCreate(Bundle state) {
super.onCreate(state);
if(mp == null) {
mp = MediaPlayer.create(this, R.raw.sample);
mp.setLooping(true);
}
}
}

ちなみに、各classで下のようにするといい感じで繋がるんだけど、
AlertDialogみたいに、intentでacitvityが遷移してないのに
windowのfocusがoffになっちゃうと音楽が止まってしまう。
そんな時は適当にflagたてておけば良いと思われます。


@Override
public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus) {
mp.start();
} else {
mp.stop();
try {
mp.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

あと、mp.stop()のあとはmp.prepare()しないと駄目らしい。
忘れがち。

自作アプリ紹介コーナー
https://itunes.apple.com/jp/app/tokimekiekisupuresustation/id660044163?mt=8
f:id:kenjiszk:20130706222734p:plain