首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebView页不可用-“Upi://”

WebView页不可用-“Upi://”
EN

Stack Overflow用户
提问于 2019-12-11 18:54:22
回答 2查看 1.2K关注 0票数 2

我有一个购物网站与基地的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代码

代码语言:javascript
复制
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代码

代码语言:javascript
复制
<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链接付款时的错误。

EN

回答 2

Stack Overflow用户

发布于 2020-05-29 22:07:27

我正在分享对我有效的方法。希望你也一样。在你发布的内容中添加了一些代码。在webview客户端中查找它。

代码语言:javascript
复制
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();
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-04-21 20:46:16

我也遇到了同样的问题,并通过添加一个if条件来解决它。

代码语言:javascript
复制
 @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支付的应用程序,那么您可以使用以下代码:

代码语言:javascript
复制
 @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;
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59284215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档