Bla*_*des 4 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;
}
}
Run Code Online (Sandbox Code Playgroud)
您shouldOverrideUrlLoading的代码中有两种方法.唯一的第一个实际上是由a调用的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;
}
});
Run Code Online (Sandbox Code Playgroud)
您需要告诉 Web 视图您何时自行处理 url 加载以及何时要对其进行委托处理。shouldOverrideUrlLoading当您通过自己的操作处理 url 加载时,只需返回 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
}
});
Run Code Online (Sandbox Code Playgroud)