【问题标题】:Cannot get shouldOverrideUrlLoading to work in Android app无法让 shouldOverrideUrlLoading 在 Android 应用程序中工作
【发布时间】:2012-08-23 12:07:53
【问题描述】:

我做了一个基于WebView的小应用。我想将除myWebView.loadUrl() 中的域之外的所有链接定向到浏览器,而不是在WebView 中打开它们。我想将mailto://链接指向用户的邮件程序。

我尝试了几个使用shouldOverrideUrlLoading() 找到的示例,但每次都出现错误或无法正常工作。我完全是菜鸟,无法理解,更不用说纠正错误了——我的能力仅限于复制和粘贴。

谁能帮我提供必要的代码以及将其放在下面代码中的什么位置?

package dk.ugenshoroskop.mobil;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class UgensHoroskop extends Activity {
private WebView myWebView;

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ugens_horoskop);

    myWebView = (WebView) findViewById(R.id.webview);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.loadUrl("http://ugens-horoskop.dk/mobile.php");
    myWebView.setWebViewClient(new WebViewClient());
    }     

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
 }       
}

【问题讨论】:

  • 你试过实现它吗?
  • 上述代码有效,只有所有链接都在webview中打开,包括最好在浏览器中查看的网站。我找到了 http 链接的解决方案 - 我会在允许时将其发布在这里,我还不能回答我自己的问题,因为我是新来的。我仍在寻找将 mailto 链接指向邮件程序的解决方案。

标签: android url webview mailto


【解决方案1】:

经过大量的尝试和错误,我已经成功地使http链接工作,你会在下面找到解决方案。但是,mailto 链接仍然不起作用。当我单击 mailto 链接时,我被告知当前不支持该操作。任何让 mailto 工作的想法将不胜感激。

这就是我所做的:

package dk.ugenshoroskop.mobil;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.net.Uri;                  /* new in order to handle URIs */

public class UgensHoroskop extends Activity {
private WebView myWebView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ugens_horoskop);

myWebView = (WebView) findViewById(R.id.webview);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("http://ugens-horoskop.dk/mobile.php");
myWebView.setWebViewClient(new WebViewClient()     /* inserted code: */
{  
@Override  
public boolean shouldOverrideUrlLoading(WebView view, String url)  
{  
if (url.contains("http://ugens-horoskop.dk"))  {
myWebView.loadUrl(url);  
return false; } 
else {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}  
}  
}

/* end inserted code */
);
}     

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
    myWebView.goBack();
    return true;
}
return super.onKeyDown(keyCode, event);
}       
}

【讨论】:

  • 上述代码适用于我的三星 S3 中的 mailto 链接,但不适用于 Eclipse 的模拟器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 2013-09-03
相关资源
最近更新 更多