У меня проблемы с попыткой опроса очереди печати, которая размещена в Интернете
По сути, точка очереди печати заключается в том, что когда вы вызываете 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"/>