
我有一个购物网站与基地的WordPress与Woo的商业,并安装了万国邮政联盟支付插件。我也有为我的网站使用网页视图的Android应用程序。
*问题*
WebView一切正常,但我在一个页面中使用了UPI支付链接来重定向到upi支付("upi://pay?pn=DevShop&pa=eshop@kotak&tr=40766&tn=OrderID40766&am=1149&cu=INR"),就像这个链接,我得到了ERR_UNKNOWN_URL_SCHEME错误。
我想我的UPI支付链接,因为上面的时候点击它在默认的UPI应用程序中打开,如BHIM,PayTM,PhonePe等。Rest将通过上述应用程序进行处理。以下是目标应用程序的链接。
https://play.google.com/store/apps/details?id=com.google.android.apps.nbu.paisa.user
https://play.google.com/store/apps/details?id=in.org.npci.upiapp
https://play.google.com/store/apps/details?id=net.one97.paytm
https://play.google.com/store/apps/details?id=com.phonepe.app
https://play.google.com/store/apps/details?id=com.mobikwik_new
https://play.google.com/store/apps/details?id=com.freecharge.android
以下是我的MainActivity.java代码
package com.shop.dev;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAppCacheEnabled(true);
myWebView.loadUrl("http://192.168.1.14/mzdec");
myWebView.setWebViewClient(new WebViewClient());
}
@Override
public void onBackPressed() {
if(myWebView.canGoBack()) {
myWebView.goBack();
} else {
super.onBackPressed();
}
}
}以下是我的AndroidManifest.xml代码
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:usesCleartextTraffic="true" android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>帮助解决错误。
以下是通过UPI链接付款时的错误。
发布于 2020-05-29 22:07:27
我正在分享对我有效的方法。希望你也一样。在你发布的内容中添加了一些代码。在webview客户端中查找它。
public class MainActivity extends AppCompatActivity {
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAppCacheEnabled(true);
myWebView.loadUrl("http://192.168.1.14/mzdec");
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView wv, String url) {
if (url.startsWith("upi:")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
});
}
@Override
public void onBackPressed() {
if(myWebView.canGoBack()) {
myWebView.goBack();
} else {
super.onBackPressed();
}
}
}发布于 2021-04-21 20:46:16
我也遇到了同样的问题,并通过添加一个if条件来解决它。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("upi:")) { //To allow link which starts with upi://
return true;
}
view.loadUrl(url);
return true;
}如果您还想显示一个应用程序选择器,以显示所有支持UPI支付的应用程序,那么您可以使用以下代码:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("upi:")) { //To allow link which starts with upi://
Intent intent = new Intent(Intent.ACTION_VIEW); // To show app chooser
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
view.loadUrl(url);
return true;
}https://stackoverflow.com/questions/59284215
复制相似问题