Estoy tratando de implementar la interfaz JS en mi WebView. Creé una clase separada con un método que llama al oyente, posteriormente, la cadena capturada por el oyente debe colocarse en la intención (en MainActivity) y finaliza la intención. MainActivity.kt:
import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.os.Bundle import android.webkit.JavascriptInterface import android.webkit.WebChromeClient import android.webkit.WebSettings import android.webkit.WebViewClient import androidx.appcompat.app.AppCompatActivity import sbs.pros.app.databinding.ActivityMainBinding typealias IDListener = (qr: String) -> Unit class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private val answerIntent = Intent() @SuppressLint("SetJavaScriptEnabled") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityPayBinding.inflate(layoutInflater) val WebView = binding.webView val webSettings: WebSettings = WebView.settings WebView.settings.javaScriptEnabled = true WebView.settings.javaScriptCanOpenWindowsAutomatically = true webSettings.builtInZoomControls = false WebView.webViewClient = WebViewClient() WebView.webChromeClient = WebChromeClient() WebView.addJavascriptInterface(WebAppInterface(this ) { id -> answerIntent.putExtra("pay", id) setResult(RESULT_OK) finish() }, "AndroidInterface") WebView.setInitialScale(160) WebView.loadUrl("https://pros.sbs/payment/create_payment.php?apicall=one_address") setContentView(binding.root) } } class WebAppInterface internal constructor(c: Context, listener: IDListener) { var mContext: Context = c fun WebAppInterface(context: Context) { this.mContext = context } @JavascriptInterface @SuppressWarnings("unused") fun getID(id: String?, listener: IDListener) { if (id != null) { listener(id) } } }crear_pago.php:
<script src="javascript.js"> function giveID(id) { AndroidInterface.getID(id); } </script> <?php if(null !==filter_input(INPUT_GET, 'apicall')){ switch(filter_input(INPUT_GET, 'apicall')){ case 'one_address': ?> <script src="javascript.js"> giveID('some_id'); </script> <?php break; } }La intención debería terminar, mostrando un resultado (String) en un TextView separado. Desafortunadamente, eso no sucede y el resultado devuelto es nulo. Por favor, ayúdame a encontrar el problema con la interfaz.