Как вызвать метод в startActivityForResult в Android с помощью Kotlin?Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Как вызвать метод в startActivityForResult в Android с помощью Kotlin?

Сообщение Гость »


Я пишу собственный модуль, чтобы добавить общий пропуск в Google Wallet в React Native с использованием Kotlin. согласно документации API кошелька Google для Android (https://developers.google.com/wallet/generic/android), мне нужно реализовать функцию onActivityResult, чтобы получить результат после того, как пользователь нажмет кнопку «Добавить в кошелек Google». Согласно документации React Native о том, как прослушивать onActivityResult (https://reactnative.dev/docs/0.71/nativ ... g-activity -result-from-startactivityforresult) Я пытаюсь вызвать метод walletClient.savePassesJwt(jwtSignedToken, this, addToGoogleWalletRequestCode), чтобы получить его результат в функции onActivityResult. Я не знаю, какое намерение использовать для этого, и получаю следующую ошибку на стороне JavaScript моего проекта React Native.

{"информация": "{ \"nativeStackAndroid\": [ { «номер строки»: 2174, \"файл\": \"Instrumentation.java\", \"имя_метода\": \"checkStartActivityResult\", \"class\": \"android.app.Instrumentation\" }, { «номер строки»: 1805, \"файл\": \"Instrumentation.java\", \"имя_метода\": \"execStartActivity\", \"class\": \"android.app.Instrumentation\" }, { «номер строки»: 5596, \"файл\": \"Activity.java\", \"имя_метода\": \"startActivityForResult\", \"класс\": \"android.app.Activity\" }, { «номер строки»: 597, \"файл\": \"ComponentActivity.java\", \"имя_метода\": \"startActivityForResult\", \"класс\": \"androidx.activity.ComponentActivity\" }, { «номер строки»: 5554, \"файл\": \"Activity.java\", \"имя_метода\": \"startActivityForResult\", \"класс\": \"android.app.Activity\" }, { «номер строки»: 583, \"файл\": \"ComponentActivity.java\", \"имя_метода\": \"startActivityForResult\", \"класс\": \"androidx.activity.ComponentActivity\" }, { «номер строки»: 112, \"файл\": \"GoogleWalletModule.kt\", \"methodName\": \"savePassToGoogleWallet\", \"класс\": \"com.peaktowertech.digivcard.GoogleWalletModule\" }, { «номер_строки»: -2, \"файл\": \"Метод.java\", \"имя_метода\": \"вызов\", \"класс\": \"java.lang.reflect.Method\" }, { «номер строки»: 372, \"файл\": \"JavaMethodWrapper.java\", \"имя_метода\": \"вызов\", \"класс\": \"com.facebook.react.bridge.JavaMethodWrapper\" }, { «номер строки»: 188, \"файл\": \"JavaModuleWrapper.java\", \"имя_метода\": \"вызов\", \"класс\": \"com.facebook.react.bridge.JavaModuleWrapper\" }, { «номер_строки»: -2, \"файл\": \"NativeRunnable.java\", \"имя_метода\": \"запустить\", \"класс\": \"com.facebook.jni.NativeRunnable\" }, { «номер строки»: 942, \"файл\": \"Handler.java\", \"methodName\": \"handleCallback\", \"класс\": \"android.os.Handler\" }, { «номер_линии»: 99, \"файл\": \"Handler.java\", \"methodName\": \"dispatchMessage\", \"класс\": \"android.os.Handler\" }, { «номер_линии»: 27, \"файл\": \"MessageQueueThreadHandler.java\", \"methodName\": \"dispatchMessage\", \"класс\": \"com.facebook.react.bridge.queue.MessageQueueThreadHandler\" }, { «номер строки»: 226, \"файл\": \"Looper.java\", \"имя_метода\": \"loopOnce\", \"класс\": \"android.os.Looper\" }, { «номер строки»: 313, \"файл\": \"Looper.java\", \"имя_метода\": \"цикл\", \"класс\": \"android.os.Looper\" }, { «номер строки»: 228, \"файл\": \"MessageQueueThreadImpl.java\", \"имя_метода\": \"запустить\", \"класс\": \"com.facebook.react.bridge.queue.MessageQueueThreadImpl$4\" }, { «номер строки»: 1012, \"файл\": \"Thread.java\", \"имя_метода\": \"запустить\", \"класс\": \"java.lang.Thread\" } ], \"userInfo\": ноль, \"message\": \"Не найдено действий для обработки намерения { }", \"код\": \"E_FAILED_TO_SHOW_WALLET_FLOW\" }", "сообщение": «Не удалось добавить в Google кошелек»} Мой родной модуль Kotlin:👇

пакет com.example.something; импортировать android.app.Activity импортировать android.content.Intent импортировать android.util.Log импортировать com.facebook.react.bridge.BaseActivityEventListener импортировать com.facebook.react.bridge.Callback импортировать com.facebook.react.bridge.LifecycleEventListener импортировать com.facebook.react.bridge.NativeModule импортировать com.facebook.react.bridge.Promise импортировать com.facebook.react.bridge.ReactApplicationContext импортировать com.facebook.react.bridge.ReactContext импортировать com.facebook.react.bridge.ReactContextBaseJavaModule импортировать com.facebook.react.bridge.ReactMethod импортировать com.google.android.gms.pay.Pay импортировать com.google.android.gms.pay.PayClient импортировать com.google.android.gms.pay.PayApiAvailabilityStatus класс GoogleWalletModule(reactContext: ReactApplicationContext, частный var WalletClient: PayClient=Pay.getClient(reactContext)) : ReactContextBaseJavaModule(reactContext) { частный val addToGoogleWalletRequestCode = 1000 частный вар saveToWalletPromise: Обещание? = ноль частный val ActivityEventListener = объект: BaseActivityEventListener() { переопределить удовольствие onActivityResult( активность: Активность?, Код запроса: Int, Код результата: Int, данные: Намерение? ) { if (requestCode == addToGoogleWalletRequestCode) { saveToWalletPromise?.let {обещание -> когда (код результата) { Activity.RESULT_OK -> { // Проход успешно сохранен } Activity.RESULT_CANCELED -> { // Операция сохранения отменена Promise.reject(E_ADD_TO_WALLET_CANCELLED, «Добавление в кошелек отменено») } PayClient.SavePassesResult.SAVE_ERROR -> data?.let { IntentData -> значение errorMessage = IntentData.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE) // Обработка ошибки обещание.reject(E_FAILED_TO_SAVE_PASS,errorMessage) } еще -> { // Обработка неожиданного (не API) исключения } } } } } } в этом { responseContext.addActivityEventListener(activityEventListener) } переопределить fun getName() = "GoogleWalletModule" @ReactMethod fun isGoogleWalletApiAvailable(myFailureCallback: Callback, mySuccessCallback: Callback) { кошелекКлиент .getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES) .addOnSuccessListener {статус -> if (статус == PayApiAvailabilityStatus.AVAILABLE) { // API доступен, покажите кнопку в вашем пользовательском интерфейсе mySuccessCallback.invoke(истина) } еще { // Пользователь или устройство не имеет права использовать Pay API mySuccessCallback.invoke(ложь) } } .addOnFailureListener { // Скрываем кнопку и, при необходимости, показываем сообщение об ошибке myFailureCallback.invoke("E_WRONG") } } @ReactMethod fun savePassToGoogleWallet(jwtSignedToken: String,promise: Promise) { вал активность = текущая активность если (активность == ноль) { Promise.reject(E_ACTIVITY_DOES_NOT_EXIST, «Активность не существует») возвращаться } saveToWalletPromise = обещание пытаться { val igniterIntent = Intent().apply { () -> WalletClient.savePassesJwt(jwtSignedToken, Activity, addToGoogleWalletRequestCode) } Activity.startActivityForResult(igniterIntent,addToGoogleWalletRequestCode) } catch (t: Throwable) { saveToWalletPromise?.reject(E_FAILED_TO_SHOW_ADD_TO_WALLET, t) saveToWalletPromise = ноль } } сопутствующий объект { const val E_ACTIVITY_DOES_NOT_EXIST = "E_ACTIVITY_DOES_NOT_EXIST" const val E_ADD_TO_WALLET_CANCELLED = "E_PICKER_CANCELLED" const val E_FAILED_TO_SHOW_ADD_TO_WALLET = "E_FAILED_TO_SHOW_WALLET_FLOW" const val E_FAILED_TO_SAVE_PASS = "E_FAILED_TO_SAVE_PASS" } } Я не знаком с разработкой под Android. Может ли кто-нибудь помочь мне, как это исправить?
Ответить

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

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

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

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

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