Androidアプリで画面遷移してもBGMが鳴り続けるようにしてみた。
お疲れ様です。高橋です。
先日無事にDAWで楽曲を作成してandroidアプリから再生出来ましたが、その時の宿題だった「画面遷移すると音楽が止まってしまう」問題を解決することが出来ました。
普通Androidアプリの画面遷移は、画面操作に関する様々なメソッドが最初から備わっているandroid.app.ActivityというClassをexntedsして、オープニング画面やオプション設定画面、メニュー画面、メイン画面等、様々なゲームに必要な画面を構築し、その間のデータのやりとりを、Intentという仕組みを使って、元画面から先画面にSerializableをImplementsしたオブジェクトをIntent.putExtraし、先画面では元画面からIntent.getSerializableExtraします。
解りやすく絵にすると、多分こんな感じ。
が、楽曲の再生、楽曲の変更、停止、といったオブジェクト(android.media.MediaPlayerといいます)をトップの画面で生成したら、その後そのオブジェクトを引き継ぐのが面倒なのです。
私は本当に面倒な事が大嫌いです。同じ事を2回言う事すらも大嫌いですし、1回出した結論を変えるのも大嫌いですし、一度書いたコードを修正するのはこの世で一番嫌いな事です。
というわけでググってみた
「activity mediaplayer」や「mediaplayer 遷移」等でググって見ると、私が求めていた答えが出てきました。
MediaPlayerで再生したファイルをintentで遷移させた先でstopさせる その1
↑が一番参考になりました。というかコードをそのままコピペして少しだけ修正です。
私はオープニング画面とメイン画面とで楽曲を分けたかったので、このようにしました。
音楽のとこだけ抜き出すと、下のような感じ。
サンプルコードは下記の通りです。
package jp.curious4dev.mediaplayerwithmultiactivity;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
public class BaseActivity extends Activity {
static protected MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (mp == null) {
mp = MediaPlayer.create(this, R.raw.opening);
mp.setLooping(true);
}
}
protected void mpChange(int intSong) {
mp = MediaPlayer.create(this, intSong);
mp.setLooping(true);
}
protected void mpStart() {
if (!mp.isPlaying()) {
mp.start();
}
}
protected void mpStop() {
if (mp.isPlaying()) {
mp.stop();
}
}
}
package jp.curious4dev.mediaplayerwithmultiactivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(button1);
mpStart();
}
OnClickListener button1 = new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SubActivity.class);
startActivity(intent);
}
};
}
package jp.curious4dev.mediaplayerwithmultiactivity;
import android.os.Bundle;
public class SubActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);
mpStop();
mpChange(R.raw.main);
mpStart();
}
}
以上、よろしくお願い致します。
関連記事
-
-
総務省統計APIで引っ張ったデータをHoloGraphLibraryで可視化してみた
お疲れ様です。高橋です。 先日の「総務省の統計APIからデータを取得する」ではデ …
-
-
リリースしたアプリ達が累計200DLを突破!
お疲れ様です。高橋です。 2014/12/04に最初にリリースした「カナかな?」 …
-
-
「寝坊した」人に自動的に遅刻の言い訳を提案する仕組みを稼働させてみた。
お疲れ様です。高橋です。 寝坊した人にアプリをオススメする仕組みを作りましたが、 …
-
-
選挙運動シミュレータ「衆院選2014」が迷走してきた。
お疲れ様です。高橋です。 選挙運動シミュレーションゲーム「衆院選2014」の見た …
-
-
遅刻の言い訳提案システム 稼働初日
お疲れ様です。高橋です。 先日まで微調整を重ねてきた「遅刻の言い訳提案システム」 …
-
-
アプリDL状況と言い訳システムの効果について
お疲れ様です。高橋です。 リリースしたアプリのDL状況 3/20(Fri)時点で …
-
-
遅刻の言い訳提案システムとウコンの力
お疲れ様です。高橋です。 現在稼働を続けている遅刻の言い訳提案システムは、改めて …
-
-
歌詞生成アプリ「カナかな?」の動詞をチューニングしてみた。
お疲れ様です。高橋です。 昨日はサーバ周りに熱中してしまってクライアント側を全く …
-
-
URL付き言い訳提案システム 稼働初日
お疲れ様です。高橋です。 本日から、よりDL数を高める施策として、提案の中にUR …
-
-
TwitterアナリティクスからCSVがダウンロード出来ない
お疲れ様です。高橋です。 TwitterアナリティクスのCSV 遅刻の言い訳提案 …



