Вызов метода принтера для приложения pos ведет себя по-разному для среды выпуска и отладки

Я застрял в этой проблеме почти неделю. Проблема, с которой я столкнулся, заключается в том, что, когда я устанавливаю приложение в режим отладки, функции принтера работают хорошо; они возвращают правильные ответы, а образцы текстов печатаются на термопринтере, который есть в POS-терминале.

Однако, когда я переключаю приложение в режим выпуска, все начинает вести себя немного иначе. Чтобы дать вам представление о том, что происходит, вот правильные вызовы и ответы методов. Вы можете видеть, что запрос, поступающий в ОС, правильный, и возвращаемые значения тоже верны.

09-06 21:22:04.058 357-357/? D/LibPrinterService: PrinterService getStatus...
09-06 21:22:04.072 357-357/? D/LibPrinterService: PrinterService getStatus,status=0
09-06 21:22:04.072 6412-6432/com.company.newpos D/PAYSDK: [+] Print Status: 0
09-06 21:22:04.072 357-466/? D/LibPrinterService: PrinterService getMaxTemperature...
09-06 21:22:04.074 357-466/? D/LibPrinterService: PrinterService getMaxTemperature,max=70
09-06 21:22:04.074 6412-6432/com.company.newpos D/PAYSDK: [+] Print MaxTemp: 70
09-06 21:22:04.074 357-5733/? D/LibPrinterService: PrinterService getWidth...
09-06 21:22:04.076 6412-6432/com.company.newpos D/PAYSDK: [+] Print Width: 384
09-06 21:22:04.077 357-357/? D/LibPrinterService: PrinterService getTemperature...
09-06 21:22:04.082 6412-6432/com.company.newpos D/PAYSDK: [+] Print Temp: 32

Так оно и должно работать. Теперь, когда я перехожу в режим выпуска. методы ведут себя иначе. Метод getStatus() заставляет PrinterService возвращать текущую температуру (getTemperature()), getMaxTemperature() возвращает статус (getStatus()). В результате модуль принтера сломался, и принтер не работает.

Сначала я подумал, что это проблема с отображением proguard (возможно, она все еще есть), но то же самое происходит, даже когда proguard и minify отключены.

Может ли кто-нибудь помочь мне сориентироваться или дать представление о том, что здесь может происходить?

Спасибо

0
0
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте добавить задержку в соединении.

 new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            // put your function here.
        }
    }, 2000);

Не могли бы вы подробнее рассказать об этом решении?

Yusuph wickama 10.09.2018 08:59

Выпускная версия приложения обычно быстрее. Так что у вас может быть проблема со временем. Может помочь задержка в коде.

Alexander Hoffmann 10.09.2018 09:05

К сожалению, происходит то же самое.

Yusuph wickama 10.09.2018 09:21
Ответ принят как подходящий

Позже мне удалось это решить. Оказалось, что конфигурация proguard не исключала некоторых классов.

Поэтому в следующий раз, когда ваше приложение будет вести себя радикально по-другому в режиме выпуска и отладки, сначала проверьте конфигурацию Proguard.

Спасибо

Другие вопросы по теме