Опрос онлайн-очереди принтера через Android фоновую службу Kotlin - PullRequest
1 голос
/ 29 мая 2020

У меня проблемы с попыткой опроса очереди печати, которая размещена в Интернете

По сути, точка очереди печати заключается в том, что когда вы вызываете URL-адрес, если в очереди есть элемент, он возвращает это, если нет, он ничего не возвращает, т.е. тайм-аут. Очередь печати очищается на 1 при каждом вызове

- Удалено -

** Изменить ** Проверено, что этот код действительно работает, если приложение открыто и в фоновом режиме, но не при закрытии приложения. В идеале я хотел бы охватить это

Альтернативные решения приветствуются, вот мой код:

Служба принтера

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        super.onStartCommand(intent, flags, startId)
        mRunning = true
        Thread{
            while(mRunning){
                Thread.sleep(30000)
                val response = transmit
                    .sendRequestManual("printerURL")
                if (response != null){
                    val openData = response.getElementsByTagName("printdata")
                    if(openData.length > 0){
                        for (socket in sockets) {
                            /* Bluetooth Printers */
                            write(openData.item(0).textContent, socket)
                        }
                    }
                }
            }
        }.start()
        return START_STICKY
    }

, где mRunning установлено в false если служба уничтожена

Передать

fun sendRequestManual(sendURL: String): Document?{
        /* create the XML form to be sent */
        val client = OkHttpClient()
        val blockingQueue: BlockingQueue<Document> = ArrayBlockingQueue(1)


        val request = Request.Builder()
            .url(sendURL)
            .get()
            .build()

        client.newCall(request).enqueue(object: Callback{
            override fun onFailure(call: Call, e: IOException){
                /* onFailure is called each time */
            }

            override fun onResponse(call: Call, response: Response) {
                if(!response.isSuccessful){

                } else {
                    responseXML = response.body?.string()
                    blockingQueue.add(parseStringXMLDoc(responseXML!!))
                }
            }
        })
        return blockingQueue.poll(10,TimeUnit.SECONDS)
    }

Манифест

       <service
            android:name=".services.PrintService"
            android:enabled="true"
            android:exported="false"
            android:stopWithTask="false"/>

1 Ответ

0 голосов
/ 29 мая 2020

Мой код не опрашивал правильно, все еще ищу ответ для опроса при закрытии приложения

Удалено

Thread.sleep(30000)

Увеличено время ожидания в очереди до 90 секунд

return blockingQueue.poll(90,TimeUnit.SECONDS)
...