Всем доброго!
Прошу строго не ругать и пожалуйста помочь, наверное для кого то это совсем не тривиальная задача.
Пишу приложения на Flutter, но тепер надо его использовать на специфическом Android устройстве, для этого мне пришлось использовать нативную часть Kotlin(которого пока не пришлось изучать).
Для этого в приложении есть специальный нативны клас который передает результат в Flutter. В нем надо писать на Kotlin.
И тут следующая задача. Есть у меня функция:
private fun readCardFn() {
var cardNumber : String
val CurAppDir: String = getApplicationContext().getFilesDir().getAbsolutePath()
SystemApi.SystemInit_Api(
0,
CommonConvert.StringToBytes("$CurAppDir/\u0000"),
getApplicationContext(),
object : ISdkStatue {
override fun sdkInitSuccessed() {
Log.e("initSDK", "success")
PiccApi.PiccClose_Api()
var ret = PiccApi.PiccOpen_Api()
thread(start = true) {
while (sloted_card == true) {
var timerid = 0
timerid = SystemApi.TimerSet_Api()
cardType = ByteArray(2)
serialNo = ByteArray(12)
while (SystemApi.TimerCheck_Api(timerid, 100 * 1000) == 0) {
picccardflag = false
val status = PiccApi.PiccCheck_Api(CARD_TYPE_M1, cardType, serialNo)
if (status == 0) {
cardNumber = CommonConvert.bcdToASCString(serialNo)
PiccApi.PiccClose_Api()
sloted_card = false
break
}
}
PiccApi.PiccClose_Api()
}
}
}
override fun sdkInitFailed() {
Log.e("initSDK", "fail")
}
})
}
Чесно говоря, собирал ее с example, которий шел с SDK, поетому могут быть ошибки, но выводить в консоль
cardNumber все же получается.
Я так понимаю что у меня тут первым идет колбек :
SystemApi.SystemInit_Api(
0,
CommonConvert.StringToBytes("$CurAppDir/\u0000"),
getApplicationContext(),
object : ISdkStatue {
override fun sdkInitSuccessed() {
Log.e("initSDK", "success")
Дальше тред в котором цикл.
Вопрос: как мне возвращать
cardNumber при вызове функции
readCardFn, мне уже понятно что простым
return тут не обойтись?
Помогите пожалуйста