1

I have an app which plays music. When the app starts loading, music starts playing. The choice of the song is random. In the fragment shows song's name. Music is playing, but song name cannot be displayed. What am I doing wrong? (It is not MainActivity, it is loading screen) here is my service:

class MediaService : Service() {
    private val binder = MediaBinder()
    private var list = arrayOf(
        R.raw.1, R.raw.2, R.raw.3, R.raw.4)
    private lateinit var mediaPlayer: MediaPlayer
    private val mGenerator = Random()

    val randomNumber: Int
        get() = list.get(mGenerator.nextInt(4))

    override fun onCreate() {
        super.onCreate()
        mediaPlayer = MediaPlayer.create(applicationContext, randomNumber)
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        mediaPlayer.start()
        Log.d(LOGCAT, "Media Player started!")
        if (!mediaPlayer.isLooping) {
            Log.d(LOGCAT, "Problem in Playing Audio")
        }
        return START_STICKY
    }

    override fun onDestroy() {
        mediaPlayer.stop()
        mediaPlayer.release()
    }

    inner class MediaBinder : Binder() {
        // Return this instance of LocalService so clients can call public methods
        fun getService(): MediaService = this@MediaService
    }

    override fun onBind(intent: Intent): IBinder {
        return binder
    }
}

here is my activity:

class MyActivity : AppCompatActivity() {

    private lateinit var mService: MediaService
    private var mBound: Boolean = false
    private val connection = object : ServiceConnection {

        override fun onServiceConnected(className: ComponentName, service: IBinder) {
            val binder = service as MediaService.MediaBinder
            mService = binder.getService()
            mBound = true
        }

        override fun onServiceDisconnected(arg0: ComponentName) {
            mBound = false
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(view)

        var fragment = LayoutProcessingFragment()
        if (mBound) {
            when (mService.randomNumber) {
                R.1
                -> {
                    fragment.binding.textGroupName.text = "1"
                }
                R.raw.2
                -> {
                    fragment.binding.textGroupName.text = "2"
                }
                R.raw.3
                -> {
                    fragment.binding.textGroupName.text = "3"
                }
                R.raw.4
                -> {
                    fragment.binding.textGroupName.text = "4"
                }
            }

        }
        playAudio(view)
 }

    fun playAudio(view: View?) {
        val objIntent = Intent(this, MediaService::class.java)
        startService(objIntent)
    }

    override fun onStart() {
        super.onStart()
        // Bind to LocalService
        Intent(this, MediaService::class.java).also { intent ->
            bindService(intent, connection, Context.BIND_AUTO_CREATE)
        }
    }

    override fun onStop() {
        super.onStop()
        unbindService(connection)
        mBound = false
    }
  }
Julia
  • 329
  • 7

0 Answers0