当前位置: 代码迷 >> Android >> 关于android webview加载的html 与 activity 直接的跳转。该如何解决
  详细解决方案

关于android webview加载的html 与 activity 直接的跳转。该如何解决

热度:787   发布时间:2016-04-27 22:44:56.0
关于android webview加载的html 与 activity 直接的跳转。
最近做一个项目,使用android webview 加载html5来 实现的,现在遇到一个问题,是关于webview 加载的html 5与 activity的跳转。

我这里用注册这个功能来解释一下这个问题.
android端webview 命名:andWebview     填写注册信息页面:andregister      

Html端 点击注册的页面   htmlbutton        登录页面:htmllogin                      

andWebview 加载 htmlbutton

点击htmlbutton页面的button按钮以后跳转到android的布局andregister的注册页面填写信息。注册成功以后我需要跳转到htmllogin登录页面,并且htmllogin是在andWebview 中加载的。  这里的htmllogin页面和htmlbutton页面是在同一个andWebview中加载的。


希望做过这方面的朋友 可以详细的回答一下 或者也可以提供一个demo给我  与君共勉。
------解决思路----------------------

理解貌似需求是这样的。
那么如何让html和Activity进行交互呢?
关于html和Activity交互,我尝试了两种方法:
第一种:JS 调用来实现HTMl页面和Activity交互
第二种:通过WebView.setWebViewClient() 利用这个方法来监控点击的URL。
先看下做的效果图吧!

思路:
第一种方案: 
js和Activity进行交互,Android的WebView中有这么一个方法:
引用
 public void addJavascriptInterface(Object obj, String interfaceName) {
    }

通过这个方法我们可以设置给html页面的js提供一个方法的接口。
活动中核心代码:

webView = (WebView) this.findViewById(R.id.webView);

WebSettings setting = webView.getSettings();
// 设置支持javascript
setting.setJavaScriptEnabled(true);

// 增加接口方法,让html页面调用

webView.addJavascriptInterface(new Object() {

// 这里我定义了一个拨打的方法
public void startPhone(String num) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + num));
startActivity(intent);
}
}, "demo");

// 加载页面
webView.loadUrl("http://10.1.26.64/demo/test.html");

html页面调用核心代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
<script type="text/javascript">  
     function show(content){  
         document.getElementById("countent").innerHTML=  
             "这是我的javascript调用. 这是:"+content;  
     }  
</script>  
</head>  
<body>  
  <table align="center">  
     <tr><td>拨号功能,点击进行拨号</td><td><a  href="javascript:demo.startPhone(10086)">10086</a></td></tr>  
     <tr><td>这个超链接是百度网址,点击跳转活动</td><td><a  href="https://www.baidu.com" >baidu</a></td></tr>  
  </table>  
  <p id="countent">html原来内容,点击按钮我会变哦</p>  
</body>  
</html> 


第二种方案:
WebView.setWebViewClient();这种方法比较简单,也简单说下吧。
看到这个问题的时候,我想了下,发现在这个方法中需要重写这个东东:
public boolean shouldOverrideUrlLoading(WebView view, String url) ;
这个方法相信很多人都知道这个本来最常用的方法是用来防止加载URL时调用其他浏览器,
然而我却发现,如果在这里利用WebView的这个监听URL的方法,那么便可以实现html和Activity之间的跳转。
核心代码如下:

//设置WebView监听事件, 监听URL
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
//如果是打开的是百度URL,则进行跳转Activity
if (url.trim().equals("https://www.baidu.com/")) {
//活动跳转的方法
JumpActvity();
}else{
    view.loadUrl(url);
}

return true;
}


demo下载地址:http://pan.baidu.com/s/1c0ntM5U 密码:k1et

说明:

1.导入工程请注意,清单文件中我设置的最低版本10,目标版本23 根据自己情况进行修改。

2.test.html文件,我使用的是xampp部署的,自己也可以选择其他web服务器

xampp 中文官网: http://www.xampps.com/

3.请确保测试手机可以联网,由于加载的url进行连接,反应会有点慢。请注意。




------解决思路----------------------
思路很简单:
你只不过是想用同一个WebView去加载两个不同的HTML,所以需要处理的就只是什么时候加载那个HTML页面这个问题了。
WebView只是一个控件,说到底,还是加载在Activity中。看下面的代码:
package com.example.androiddemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;

/**
 * WebView只是一个控件,说到底,它还是在Activity中,所以只需简单的理解为两个Activity之间的跳转,
 * Activity都会保持在栈中,所以,只需在Activity重新调用(也就是onResume()方法)时作相应的处理就行了。
 * @author luosiye
 */
public class AndroidWebView extends Activity{

final static int CLICK = 0x00000F;
final static int LOGIN = 0x00000E;

private final String clickUrl = "file:///android_asset/click.html";
private final String loginUrl = "file:///android_asset/login.html";
public static int loadIndex = CLICK;
private WebView mWebView;
private WebSettings webSettings;

@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.web_layout);
loadIndex = CLICK;
webViewInit();
}

private void webViewInit(){
mWebView = (WebView)findViewById(R.id.web_view);
webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
webSettings.setBuiltInZoomControls(false);
mWebView.clearCache(true);
}


@Override
protected void onResume() {
super.onResume();
//loadIndex的赋值也可以放在htmlbutton的点击时间中。
if(loadIndex == CLICK){
mWebView.loadUrl(clickUrl);
}else if(loadIndex == LOGIN){
mWebView.loadUrl(loginUrl);
}
}

@Override
protected void onPause() {
super.onPause();
loadIndex = CLICK;
}

@Override
protected void onStop() {
super.onStop();
loadIndex = LOGIN;
}

@Override
protected void onDestroy() {
super.onDestroy();
loadIndex = LOGIN;
}

}
  相关解决方案