Как изолировать от вызова onActivityResult?
Вопрос заключается в том что, когда подключенные пакеты flutter работают с MethodChannel и вызывают свои onActivityResult, сперва срабатывает onActivityResult описанный в MainActivity.
Как изолировать вызов onActivityResult описанный в MainActivity от других пакетов flutter Ошибка выдается следующая: PlatformException(INTERRUPTED, Interrupted by another login call, null, null)
class MainActivity : FlutterActivity() {
private val CHANNEL = "flutter_login_ok"
private lateinit var dartChannel: MethodChannel
private lateinit var okLoginManager: Odnoklassniki
lateinit var methodChannelResult: MethodChannel.Result
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
val dartChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
dartChannel.setMethodCallHandler(MethodCallHandler(methodChannelResult, okLoginManager))
}
private val okAuthCallback = object : OkListener {
override fun onSuccess(json: JSONObject) {
try {
println(json)
val token = json.getString("access_token")
val secretKey = json.getString("session_secret_key")
val expiresIn = json.getString("expires_in")
val hashmap = HashMap<String, String>()
hashmap["access_token"] = token
hashmap["secret"] = secretKey
hashmap["expires_in"] = expiresIn
methodChannelResult.success(hashmap)
} catch (exception: JSONException) {
onError(exception.localizedMessage)
}
}
override fun onError(error: String?) {
methodChannelResult.error("UNAVAILABLE", "error authorisation", null)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (::okLoginManager.isInitialized) {
okLoginManager.onAuthActivityResult(requestCode, resultCode, data, okAuthCallback)
}
}
}
class MethodCallHandler(
private var methodChannelResult: MethodChannel.Result,
private var okLoginManager: Odnoklassniki) :MethodChannel.MethodCallHandler {
private var activity: Activity? = null
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
if (call.method == "okLogin") {
methodChannelResult = result
okLoginManager = Odnoklassniki.createInstance(
activity!!.applicationContext,
getResourceFromContext(activity!!.applicationContext, "ok_app_id"),
getResourceFromContext(activity!!.applicationContext, "ok_app_key"),
)
okLoginManager.requestAuthorization(
activity!!,
getResourceFromContext(activity!!.applicationContext, "ok_redirect_url"),
OkAuthType.WEBVIEW_OAUTH,
OkScope.VALUABLE_ACCESS
)
} else {
result.notImplemented()
}
}
private fun getResourceFromContext(context: Context, resName: String): String {
val stringRes = context.resources.getIdentifier(resName, "string", context.packageName)
if (stringRes == 0) {
throw IllegalArgumentException(
String.format(
"The 'R.string.%s' value it's not defined in your project's resources file.",
resName
)
)
}
return context.getString(stringRes)
}
}