〇やりたいこと
SoundPoolの再生と停止を異なるActivityファイルで実行したいです
詳細
1.MainActivityでSoundPoolの初期化を行い、音楽を再生する
2.音楽再生と同時にintentでAlarmActivityに画面を移動する
3. AlarmActivityでSoundPoolの音楽を停止する
〇困っていること
上記3で、AlarmActivity画面でSoundPoolを呼び出したいが、呼び出し方が分からず困っております。
(SoundPoolを呼び出すために初期化すると、停止ができないです)
コードは冗長なため一部分のみ書きました。
MainActiviy
1class MainActivity : FragmentActivity(), TimePickerDialog.OnTimeSetListener { 2 3 private lateinit var binding: ActivityMainBinding 4 private lateinit var soundManager: SoundManager 5 6 override fun onCreate(savedInstanceState: Bundle?) { 7 super.onCreate(savedInstanceState) 8 binding = ActivityMainBinding.inflate(layoutInflater) 9 setContentView(binding.root) 10 11 soundManager = SoundManager(this) //初期化 12 13 binding.btnTest.setOnClickListener { 14 alarmSet() 15 } 16 } 17 18 fun alarmSet(){ 19 soundManager.playOne() 20 val intentA = Intent(this, AlarmActivity::class.java) 21 startActivity(intentA) 22 } 23}
AlarmActivity
1class AlarmActivity : AppCompatActivity() { 2 3 private lateinit var binding: ActivityAlarmBinding 4 private lateinit var soundManager: SoundManager //NG 5 6 override fun onCreate(savedInstanceState: Bundle?) { 7 super.onCreate(savedInstanceState) 8 binding = ActivityAlarmBinding.inflate(layoutInflater) 9 setContentView(binding.root) 10 11 soundManager = SoundManager(this) //初期化? 12 13 binding.btnStop.setOnClickListener{ //アラームを止める 14 soundManager.cancelOne() 15 } 16 } 17}
SoundManager
1class SoundManager(context: Context) { 2 3 private var soundPool: SoundPool 4 private var soundOne = 0 5 private var streamId2 = 0 6 7 init { 8 //soundPool設定 9 val audioAttributes = AudioAttributes.Builder() 10 .setUsage(AudioAttributes.USAGE_GAME) 11 .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH) 12 .build() 13 14 soundPool = SoundPool.Builder() 15 .setAudioAttributes(audioAttributes) 16 .setMaxStreams(1) 17 .build() 18 19 soundOne = soundPool.load(context, R.raw.bellsound, 1) 20 Log.d("debug", "SoundManager init") 21 } 22 23 fun playOne() { 24 cancelOne() 25 streamId2 = soundPool.play(soundOne, 1.0f, 1.0f, 0, -1, 1.0f) 26 } 27 28 fun cancelOne() { 29 if(streamId2 != 0) { //fun playOneを通るとここを通る(音が鳴るとstreamId2= 1 が入る) 30 soundPool.stop(streamId2) 31 streamId2 = 0 32 } 33 } 34}
回答1件
あなたの回答
tips
プレビュー