Сбой USB-соединения Android Open Accessory после закрытия и повторного открытия приложения AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Сбой USB-соединения Android Open Accessory после закрытия и повторного открытия приложения Android

Сообщение Anonymous »

Итак, у меня есть приложение для Android, которое взаимодействует с ПК в режиме AOA. Проблема в том, что когда я закрываю свое приложение и снова открываю его, я могу отправлять данные с устройства Android на ПК, но мой поток прослушивания не работает и не получает никаких данных. Я искал ответы в Интернете, но ничего не помогло в моей ситуации, только обходной путь: отключить и снова подключить USB-кабель только после этого мой поток прослушивателя снова заработает. Вот код, который я вызываю в своих приложениях onDestroy, а также код для запуска потока прослушивателя.
Функция закрытия аксессуара:

Код: Выделить всё

fun closeAccessory() {
try {
mInputStream?.close()
} catch (e: IOException) {
Log.i(TAG, "Error closing inputStream", e)
logInfo(TAG, "Error closing inputStream")
} finally {
mInputStream = null
}

try {
mOutputStream?.close()
} catch (e: IOException) {
Log.i(TAG, "Error closing outputStream", e)
logInfo(TAG, "Error closing outputStream")
} finally {
mOutputStream = null
}

try {
mFileDescriptor?.close()
} catch (e: IOException) {
Log.i(TAG, "Error closing fileDescriptor", e)
logInfo(TAG, "Error closing fileDescriptor")
} finally {
mFileDescriptor = null
}

if (::readjob.isInitialized) readjob.cancel()
}
Функция для инициализации потока прослушивателя:

Код: Выделить всё

    private fun openAccessory(accessory: UsbAccessory) {
mFileDescriptor = usbManager.openAccessory(accessory)
if (mFileDescriptor != null) {

mAccessory = accessory
val fd = mFileDescriptor!!.fileDescriptor
mInputStream = FileInputStream(fd)
mOutputStream = FileOutputStream(fd)

logInfo(Companion.TAG, "Accessory opened")

readjob = GlobalScope.launch(Dispatchers.IO){
isReading = true

while (isReading) {
try {
val buffer = ByteArray(1000)
mInputStream!!.read(buffer)
getIncomingData(buffer)
logInfo(Companion.TAG, "Read succeed")

} catch (e: IOException) {
logInfo(Companion.TAG, "Read failed: $e")
break
}
}
}
} else {
logInfo(Companion.TAG, "Accessory open fail")
}
}
Я пытался не закрывать входной поток, но это сделало мое соединение непригодным для использования. Также я попытался дополнительно зарегистрировать проблему с помощью дополнительных журналов, которые я получил из него: Аксессуар действительно открывается, и я могу отправлять данные на ПК, но входной поток застревает в поврежденном состоянии после закрытия, поэтому я не могу отправлять данные с ПК. в приложении Android у меня тайм-аут.

Подробнее здесь: https://stackoverflow.com/questions/790 ... openning-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»