问题描述
**升级targetdk版本29后,我不得不将与xwalkview一起使用的应用程序转换为Android Webview,因为该应用程序无法在Android 10上运行。现在,我的应用程序打开,但表单未提交。因此,付款屏幕无法打开。 我在下面的PayActivity中编写了代码示例。**
myInterface = new WebAppInterface(PayActivity.this,getApplicationContext());
payWebView.addJavascriptInterface(myInterface,"NativePay");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
WebSettings webSettings = payWebView.getSettings();
payWebView.getSettings().setDomStorageEnabled(true);
payWebView.getSettings().setAllowFileAccessFromFileURLs(true);
payWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
payWebView.getSettings().setAllowContentAccess(true);
payWebView.getSettings().setJavaScriptEnabled(true);
payWebView.getSettings().setDatabaseEnabled(true);
payWebView.getSettings().setJavaScriptCanopenWindowsAutomatically(true);
payWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading (WebView view,String url) {
return true;
}
public void onPageFinished(WebView view,String url) {
if (url.contains("/payment/online_odeme_basarili")) {
setResult(RESULT_OK);
finish();
} else if (url.contains("/payment/online_odeme_basarisiz")) {
setResult(RESULT_FirsT_USER);
finish();
}
}
});
payWebView.loadUrl("https://" + MainActivity.domainURL + "/payment/online_odeme/" + "1233 + "/" + "123" + "/" + "01",null);
build.gradle
compileSdkVersion 29
buildToolsversion '29.0.2'
defaultConfig {
applicationId "..."
minSdkVersion 16
targetSdkVersion 29
versionCode 6
versionName "1.0.4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
这样的我的表单
<form id="bankPost" method="post" action="<?PHP echo $url; ?>" style="width: 100%;display: block;">
<input type="hidden" name="exmple" value="12">
<input type="submit" class="button-confirm" value="Accept"></form>
解决方法
问题解决了。
我在PayActivity中添加了以下代码。
@Override
protected void onPause() {
super.onPause();
if (payWebView != null) {
payWebView.pauseTimers();
}
}
@Override
protected void onResume() {
super.onResume();
if (payWebView != null) {
payWebView.resumeTimers();
}
}