http://一个href链接在Android中不起作用

时间:2013-03-04 17:47:13

标签: java android android-intent

我在Android应用中使用了webview。

我有3个按钮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;
}
}

3 个答案:

答案 0 :(得分:7)

您的代码中有两个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; } }); ,它将起作用。

{{1}}

答案 1 :(得分:3)

当您自己处理网址加载以及何时需要对其进行委托处理时,您需要告诉网络视图。当您通过自己的操作处理网址加载时,只需从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
    }
});

答案 2 :(得分:1)

如果你想覆盖(即防止默认处理),方法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;
}