【问题标题】:Open Dialer AND Open web links in webview[Error] ANDROID打开拨号器并在 webview 中打开网页链接[错误] ANDROID
【发布时间】:2012-03-06 13:24:19
【问题描述】:
package com.example.t2noob;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

public class Activity extends Activity
{   
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url.startsWith("tel:")) { 
            Intent intent = new Intent(Intent.ACTION_DIAL,
                    Uri.parse(url)); 
            startActivity(intent); 
    }else if(url.startsWith("http:") || url.startsWith("https:")) {
        view.loadUrl(url);
    }
    return true;
    }



  WebView mWebView;




  public void onCreate(Bundle paramBundle)
  {



      super.onCreate(paramBundle);
      requestWindowFeature(1);
      getWindow().setFlags(1024, 1024);
      setContentView(2130903040);
      final Button button = (Button) findViewById(R.id.Home);//BUTTONS ON TOP OF WEBVIEW. HOME
      button.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {
            mWebView.loadUrl("test.com");
          }
      });
      final Button button1 = (Button) findViewById(R.id.Back);//BUTTONS ON TOP OF WEBVIEW. BACK
      button1.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {
            mWebView.goBack();
          }
          });

      this.mWebView = ((WebView)findViewById(2131034112));
      this.mWebView.getSettings().setJavaScriptEnabled(true);
      this.mWebView.setWebViewClient(new WebViewClient());
      this.mWebView.getSettings().setJavaScriptEnabled(true);
      this.mWebView.setVerticalScrollBarEnabled(true);
      this.mWebView.setHorizontalScrollBarEnabled(true);
      this.mWebView.loadUrl("test.com");
      this.mWebView.getSettings().setLoadWithOverviewMode(true);

       }


      public boolean onKeyDown(int paramInt, KeyEvent paramKeyEvent)//LETS USER PUSH BACK BUTTON ON PHONE TO GO BACK A PAGE IN WEBVIEW.
      {
        boolean bool;
        if ((paramInt != 4) || (!this.mWebView.canGoBack()))
        {
     bool = super.onKeyDown(paramInt, paramKeyEvent);
 }
 else
 {
   this.mWebView.goBack();
   bool = true;
 }
 return bool;
}   

}

所以我有上面的源代码函数 shoudOverrideUrlLoading 如果我没有误读,应该捕获两个 Web 链接以在 Web 视图中打开它们 并使用 android 拨号器打开电话号码。 使用上面的代码,我可以获得在 webview 中打开的链接,但它不会在拨号器中打开数字。 如果我将此代码添加到程序中。

private static final WebViewClient Webview = null;
this.mWebView.setWebViewClient(Webview);

我可以打开拨号程序,但网页链接不会在网页视图中打开,但实际上会在默认浏览器中打开。 因此,我想获得一些帮助,帮助它在拨号器中打开电话号码并在 web 视图中打开网络链接,而不仅仅是或者。

【问题讨论】:

    标签: android webview


    【解决方案1】:

    使用这个

    private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      if(url.contains("tel:"))
      {
       //make the substring with the telephone number, and invoke intent for dialer
      }
     else
       view.loadUrl(url);
       return true;
    }
    

    }

    并将网页视图客户端设置为

    this.mWebView.setWebViewClient(new HelloWebViewClient());
    

    这将确保链接在同一个 Web 视图中打开,而不是在浏览器中打开。 注意:删除 setWebViewClient() 的所有其他用途

    已编辑:这将解决!

    【讨论】:

    • 是的,我知道这应该修复在 webview 中打开的链接,但我希望 web 链接在 webview 和电话号码中打开,sms 分别打开拨号器和消息应用程序。使用您的代码,它只会打开 webview 中的链接,但在单击数字时不会打开拨号器。(实际上我之前有您的代码,但是当我添加内容以在单击数字时打开拨号器时,它不会打开网络webview中的链接。)所以我想知道我是否做错了什么。因为它没有同时捕获电话号码和网络链接。它只是做一个或另一个。
    • 使用类似这样的东西 if(url.contains("tel:")) { //制作子字符串,并调用意图拨号,在else中,使用view.loadUrl(url ); } 明白了吗?
    • 我能够弄清楚这与我在修复功能一切正常后设置功能的方式有关。感谢您的帮助。
    • 但这不是正确的答案......大声笑这是一个语法错误......我如何放置我的函数。
    猜你喜欢
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2011-07-26
    • 2015-12-09
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多