Activityが4つあるアプリを作成しております。
画面構成としてはA→B→CもしくはA→D→B→Cというような形で遷移します。
MediaPlayerを使ってBGMの再生をしたいと思っております。
アプリを通して同じBGMの再生を考えております。
複数Activityに渡るのでどのように実装して良いものか困っております。
BGMを再生したいタイミングはアプリが起動したタイミングとバックグラウンドから復帰したタイミング
BGMの再生を止めたいのはアプリが終了したタイミングとバックグラウンドに行ったタイミングです。
AのonCreate()で再生は良いのですが、ストップと再開のタイミングがどのActivityのどのサイクルに書けばよいのものかと悩んでいます。
serviceを使うと実現できるという記事を見たのですがうまく実装ができません。
こちらを参考に実装してみたのですがBGMの再生ができません。
(AActivityのonCreate()で startService(Intent(baseContext,MyService::class.java))を呼び出しています。)
import android.app.Service import android.content.Intent import android.os.IBinder class MyService: Service() { lateinit var audioPlayer: MyAudioPlayer override fun onBind(p0: Intent?): IBinder? { TODO("Not yet implemented") } override fun onCreate() { super.onCreate() audioPlayer = MyAudioPlayer(this) audioPlayer.play("bgm.mp3") } override fun onDestroy() { super.onDestroy() audioPlayer.stop() }
import android.content.Context import android.media.MediaPlayer class MyAudioPlayer(val context: Context) { private var mediaPlayer: MediaPlayer? = null fun setUp(fileName: String): Boolean { mediaPlayer = MediaPlayer() var fileCheck = false try { val afdescripter = context.assets.openFd(fileName) mediaPlayer?.setDataSource( afdescripter.fileDescriptor, afdescripter.startOffset, afdescripter.length ) mediaPlayer?.prepare() fileCheck = true } catch (e: java.lang.Exception) { println(e) } return fileCheck } fun play(fileName: String) { if (mediaPlayer == null) { setUp(fileName) }else{ mediaPlayer?.stop() mediaPlayer?.reset() mediaPlayer?.release() } mediaPlayer?.start() } fun stop(){ mediaPlayer?.stop() mediaPlayer?.reset() mediaPlayer?.release() mediaPlayer = null } }
どの様な方法が良いかアドバイスいただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー