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からデータを取得する」ではデ …
-
Androidアプリ上でLINEみたいな吹き出しでTextを囲んで表示してみた。
お疲れ様です。高橋です。 AndroidでLINEみたいにテキストの周りを吹き出 …
-
URL付き言い訳提案システム 稼働2日目
お疲れ様です。高橋です。 本日は946寝坊、270提案、19クリックでした。 & …
-
DLリンク付き言い訳提案システムとDL数の関係について
お疲れ様です。高橋です。 DLリンク付きの言い訳提案システムを1週間稼働させ、そ …
-
上司離着席状態検知アプリ
お疲れ様です。高橋です。 上司離着席状態検知システムですが、 必要性を記載 回路 …
-
選挙運動を疑似体験出来るシミュレータ「衆院選2014」を作った、が。
お疲れ様です。高橋です。 2014年11月21日に衆議院が解散され、12月2日に …
-
総務省の統計APIからデータを取得する
お疲れ様です。高橋です。 androidアプリから総務省APIをコールしてみる …
-
街頭インタビュー生成アプリ
お疲れ様です。高橋です。 街頭インタビューっぽいアプリ 街頭インタビューっぽい画 …
-
FreeなWindows向けDAWを使って作った音楽をwavからoggにしてAndroidアプリで鳴らしてみた。
お疲れ様です。高橋です。 先日POSTした「DAWを使って、ゲームの裏側で鳴らす …
-
街頭インタビュー 入力UI実装
お疲れ様です。高橋です。 今日は文字入力UI及び、背景人物の切り替え機能を実装し …