неразрешенная ссылка: @MusicService - PullRequest
0 голосов
/ 31 октября 2019

Я использовал этот класс в своем классе обслуживания, чтобы помочь мне получить доступ к услуге из моей деятельности. Мое имя класса обслуживания - MusicService.

class MusicBinder: Binder(){
      fun getService():MusicService{
          return this@MusicService
      }
}

Но я получаю эту ошибку:

unresolved reference: @MusicService

Я попробовал ключевое слово inner для класса MusicBinder, но оно не сработало. Я был бы признателен, если бы вы помогли мне с этим.

Обновление: Вот часть моей деятельности, которую я использую для доступа к сервису.

private val serviceConnection = object : ServiceConnection {
        override fun onServiceDisconnected(p0: ComponentName?) {
        }
        override fun onServiceConnected(p0: ComponentName?, p1: IBinder?) {1
            musicService = p1.getService()
        }
    }

1 Ответ

1 голос
/ 31 октября 2019

Правильная реализация привязки Сервиса Android в Kotlin:

class MusicService : Service() {

    private val musicBinder = MusicBinder()

    inner class MusicBinder: Binder() {
        fun getService() : MusicService {
            return this@MusicService
        }
    }

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

и в вашей Активности:

private var isBinded = false
private var musicService: MusicService? = null
private val musicServiceConnection = object: ServiceConnection {
    override fun onServiceDisconnected(name: ComponentName?) {
        musicService = null
    }

    override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
        musicService = (service as MusicService.MusicBinder).getService()
    }
}

fun bindService() {
    if (bindService(Intent(this, MusicService::class.java), musicServiceConnection, Context.BIND_AUTO_CREATE)) {
        isBinded = true
    } else {
        // log error here
    }
}

fun unbindService() {
    if (isBinded) {
        unbindService(musicServiceConnection)
        isBinded = false
    }
}

override fun onDestroy() {
    unbindService()
    super.onDestroy()
}

Более подробную информацию можно найти здесь: https://developer.android.com/reference/android/app/Service.html или в Сервисекласс JavaDoc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...