【问题标题】:http:// a href link not working in Androidhttp:// a href 链接在 Android 中不起作用
【发布时间】:2013-03-04 17:47:12
【问题描述】:

我在我的 Android 应用程序中使用 webview。

我有 3 个按钮 1 用于链接到网站 1 用于拨打电话号码和 1 电子邮件按钮。

第一次调用我的网站按钮有效,http://www.somelink.com。

但我的电话:链接不起作用。所以我集成了一些代码,使我的 tel: 按钮工作。

问题是它使我的网站或 http: 按钮不起作用?

当您单击 html 按钮时,它什么也不做。

package de.sonae.novolam;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;


@SuppressLint("SetJavaScriptEnabled")
public class DFragment extends Fragment {

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View mainView = (View) inflater.inflate(R.layout.dfragment, container, false);
WebView webView = (WebView) mainView.findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView wv, String url) {
    if (url.startsWith("tel:")) { 
            Intent intent = new Intent(Intent.ACTION_DIAL,
                    Uri.parse(url)); 
            startActivity(intent); 
    }

    return true;
}
    });
webView.loadUrl("file:///android_asset/contact.html");
return mainView;
}

public boolean shouldOverrideUrlLoading(WebView webView, String url) {
    if( url.startsWith("http:") || url.startsWith("https:") ) {
        webView.loadUrl(url);
         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
         startActivity( intent ); 
    }

    else if (url.startsWith("mailto:")) { 

    }

    // Otherwise allow the OS to handle it
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    startActivity( intent ); 
    return true;
}
}

【问题讨论】:

    标签: java android android-intent


    【解决方案1】:

    您的代码中有两个shouldOverrideUrlLoading 方法。唯一的第一个实际上是由WebView 调用的。将代码从第二个 shouldOverrideUrlLoading 移动到第一个,它会起作用。

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView wv, String url) {
            if (url.startsWith("tel:")) { 
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
                startActivity(intent);
                return true;
            } else if( url.startsWith("http:") || url.startsWith("https:") ) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent); 
                return true;
            } else if (url.startsWith("mailto:")) { 
                // TODO : handle mail url
                return true;
            }
    
            return false;
        }   
    });
    

    【讨论】:

      【解决方案2】:

      当您自己处理 url 加载以及何时要对其进行委托处理时,您需要告诉 web 视图。当您通过自己的操作处理 url 加载时,只需从 shouldOverrideUrlLoading 返回 true。否则返回false:

      webView.setWebViewClient(new WebViewClient() {
          @Override
          public boolean shouldOverrideUrlLoading(WebView wv, String url) {
              if (url.startsWith("tel:")) { 
                  Intent intent = new Intent(Intent.ACTION_DIAL,
                          Uri.parse(url)); 
                  startActivity(intent); 
      
                  return true; // we handled the url loading
              }
      
              return false; // let WebView handle this event
          }
      });
      

      【讨论】:

        【解决方案3】:

        如果你想覆盖(即阻止默认处理),shouldOverrideUrlLoading 方法应该返回 true,如果你想让事情正常工作,则返回 false。

        @Override
        public boolean shouldOverrideUrlLoading(WebView wv, String url) {
            if (url.startsWith("tel:")) { 
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
                startActivity(intent);
                return true;
            }
        
            return false;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-29
          • 2017-06-05
          • 1970-01-01
          • 2016-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多