DatagramSocket не получает некоторые пакеты на Android 9 - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу получать обратные вызовы callerId в моем приложении Android. Я следовал примеру, предоставленному его создателями, который доступен здесь .

Моя функция прослушивания выглядит следующим образом (точная копия, но в Kotlin):

private fun startListening() {
        val socket = DatagramSocket(null)
        val address = InetSocketAddress("255.255.255.255", 3520)
        socket.reuseAddress = true
        socket.broadcast = true
        socket.bind(address)

        var looping = true
        var buffer = ByteArray(65507)

        while (looping) {
            val dp = DatagramPacket(buffer, buffer.size)
            try {
                log.debug("Waiting for call")
                socket.receive(dp)

                val recString = String(dp.data, 0, dp.length)

                log.debug("Received new message: $recString")
                _callReceivedLive.postValue(recString)
            } catch (e: Exception) {
                log.error("Exception in CallerIdListener", e)
                looping = false
            }
        }
    }

После установки на устройство с версией Android 5.1.1 все выглядит нормально. Каждое отдельное обращение с использованием эмулятора Ethernet принимается приложением. Теперь, после запуска этого приложения на Samsung Galaxy Tab с Android версии 9, оно получает только около 30% звонков.

Есть идеи, что может быть не так?

...