`

安卓webview和js+html交互利用的addJavascriptInterface和webview.loadUrl("javascript:**");

阅读更多

近期做一个项目需要把一个 服务支持的界面用webview来显示..呀 html白雪了js更是一样啥也不会,相信很多初学屌丝员跟我一样,,

html开发工具都不知道怎么写..哈哈哈.....现在把做完的结果分享一下先上图了

,,

这是从项目中特意分离出来的demo这里之上一些关键代码

源码下载地址  http://download.csdn.net/download/yung7086/7554309

 

步骤 首先在assets目录下建一个html文件

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  2. <html>  
  3.   <head>   
  4.         <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />   
  5.         
  6.      
  7. <script type="text/javascript">  
  8. function createTable(phon){   
  9.    var table = document.getElementById("table");   
  10.    var arrya=phon.split(";");  
  11.    var rowindex=0;  
  12.   for(var i=0;i<arrya.length;i++){  
  13.          var  childarrya[i].split(",");  
  14.          var row = table.insertRow(rowindex);//创建一行   
  15.          rowindex+=1;  
  16.          var cell1 = row.insertCell();//创建一个单元   
  17.          cell1.innerHTML=child[0];  
  18.           var cell2 = row.insertCell();//创建一个单元   
  19.          cell2.innerHTML="("+i+")";  
  20.           
  21.         for(var n=1;n<child.length;n++){  
  22.              var row = table.insertRow(rowindex);//创建一行   
  23.              rowindex+=1;  
  24.              var cell1 = row.insertCell();//创建一个单元   
  25.            if(i==0){  
  26.               cell1.innerHTML= "<a href='javascript:Android.callPhone(\""+child[n]+"\")'>" +child[n];   
  27.            }else if(i==1){  
  28.              cell1.innerHTML= "<img src=\"file:///android_asset/qqicon.png\" height=\"14\" width=\"16\" > "+ "<a href='javascript:Android.callQQ(\""+child[n]+"\")'>" +child[n];   
  29.            }else if(i==2){  
  30.              cell1.innerHTML= "<img src=\"file:///android_asset/wxicon.png\" height=\"12\" width=\"16\" > "+ "<a href='javascript:Android.callWeixin(\""+child[n]+"\")'>" +child[n];   
  31.            }  
  32.            var cell2 = row.insertCell();  
  33.          }  
  34.      }  
  35.  }   
  36. </script>  
  37.  </head>   
  38.  <body>  
  39.   
  40.  <font color="#0099FF" size="5"> 服务支持</font> </p>  
  41.   
  42.   
  43. <table id="table" >  
  44. </table>  
  45. </p></p></p></p></p>  
  46.   
  47.  <font color="#233fF1" size="2">  
  48.  PS:</p>  
  49. 以上连接可以点击进入QQ或者微信程序,界面的电话号码QQ号码都是从服务器获取,获取的数据直接保存在应用的私有目录下,然后从该目录取出数据通过java类调用js填充到html上,html根据绑定的java对象调用java类的方法实现拨打电话,, 转载请标明出处  
  50. </p> 尊重作者 @author yung7086   
  51. </p> 2014年6月26日 11:25:46</font>  
  52.  </body>  
  53. </html>  


 

玩这个都玩了好久应为直接是eclipse开发 写一个function写了N遍老师少了逗号大括号还不报错。。。。郁闷的求推荐html+js的开发工具

 

算了还是整片的贴出来吧..html需要调用拨打电话这些功能就需要调用java类了这里我就需要定义一个java类实现html需要调用的方法

 

  1. package com.example.jsdemo;  
  2.   
  3. import android.content.ComponentName;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.content.pm.ApplicationInfo;  
  7. import android.content.pm.PackageManager;  
  8. import android.content.pm.PackageManager.NameNotFoundException;  
  9. import android.net.Uri;  
  10. import android.webkit.JavascriptInterface;  
  11.   
  12. /** 
  13.  * JS的调用的方法 
  14.  *  
  15.  * @author yung 
  16.  *         <p> 
  17.  *         2014年6月24日 09:26:14 
  18.  *         <p> 
  19.  *         此类中的打开的QQ 和微信是直接通过包名和类名调用虽然QQ微信包名不容易变 但是主界面好事可能会变 
  20.  *         如果发现打不开QQ微信应用可以查看是否是QQ微信升级更改了类名 
  21.  */  
  22. public class AndroidJavaScript {  
  23.   
  24.     Context c;  
  25.     String[] qqpackage = new String[] { "com.tencent.mobileqq",  
  26.             "com.tencent.mobileqq.activity.SplashActivity" };  
  27.     String[] wxpackage = new String[] { "com.tencent.mm",  
  28.             "com.tencent.mm.ui.LauncherUI" };  
  29.   
  30.     public AndroidJavaScript(Context c) {  
  31.         this.c = c;  
  32.     }  
  33.   
  34.     @JavascriptInterface  
  35.     public void callPhone(final String telphone) {  
  36.   
  37.         Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"  
  38.                 + telphone));  
  39.         c.startActivity(intent);  
  40.   
  41.     }  
  42.   
  43.     @JavascriptInterface  
  44.     public void callQQ(String qq) {  
  45.         // 实现调用电话号码  
  46.   
  47.         if (!checkBrowser(qqpackage[0])) {  
  48.   
  49.         } else {  
  50.             Intent intent = new Intent();  
  51.             ComponentName cmp = new ComponentName(qqpackage[0], qqpackage[1]);  
  52.             intent.setAction(Intent.ACTION_MAIN);  
  53.             intent.addCategory(Intent.CATEGORY_LAUNCHER);  
  54.             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  55.             intent.setComponent(cmp);  
  56.             c.startActivity(intent);  
  57.         }  
  58.   
  59.     }  
  60.   
  61.     @JavascriptInterface  
  62.     public void callWeixin(String weixin) {  
  63.   
  64.         if (!checkBrowser(wxpackage[0])) {  
  65.   
  66.         } else {  
  67.             Intent intent = new Intent();  
  68.             ComponentName cmp = new ComponentName(wxpackage[0], wxpackage[1]);  
  69.             intent.setAction(Intent.ACTION_MAIN);  
  70.             intent.addCategory(Intent.CATEGORY_LAUNCHER);  
  71.             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  72.             intent.setComponent(cmp);  
  73.             c.startActivity(intent);  
  74.   
  75.         }  
  76.   
  77.     }  
  78.   
  79.     // 获取在webview上获取js生成的html的源码  
  80.     @JavascriptInterface  
  81.     public void getSource(String htmlstr) {  
  82.         // Log.e("html", htmlstr);  
  83.         // String path = c.getFilesDir().getAbsolutePath() + "/serve.html"; //  
  84.         // data/data目录  
  85.   
  86.     }  
  87.         //检测包名的应用是否已经安装在手机  
  88.     public boolean checkBrowser(String packageName) {  
  89.         if (packageName == null || "".equals(packageName))  
  90.             return false;  
  91.         try {  
  92.             ApplicationInfo info = c.getPackageManager().getApplicationInfo(  
  93.                     packageName, PackageManager.GET_UNINSTALLED_PACKAGES);  
  94.             return true;  
  95.         } catch (NameNotFoundException e) {  
  96.             return false;  
  97.         }  
  98.     }  
  99. }  

现在有了方法有了html就差怎么调用了这样记得设置webview必要是参数

 

myWebView.addJavascriptInterface(new AndroidJavaScript(this), "Android");

你是否发现html的js方法里面有酱紫的语句

<a href='javascript:Android.callWeixin(\""+child[n]+"\")'>"

确实这里面的”Android和“myWebView.addJavascriptInterface(new AndroidJavaScript(this), "Android");必须相同哦..

这里注意双引号哈

 

  1. WebSettings webSettings = myWebView.getSettings();  
  2.         webSettings.setJavaScriptEnabled(true);  
  3.         isExistsHTML();  
  4.         // myWebView.loadUrl("file:///android_asset/ss.html");  
  5.         String path = getFilesDir().getAbsolutePath() + HTMLNAME; // data/data目录  
  6.         myWebView.loadUrl("file:///" + path);  
  7.         myWebView.addJavascriptInterface(new AndroidJavaScript(this), "Android");  
  8.   
  9.         // myWebView.loadUrl("javascript:getStr('" + 122222 + "')");  
  10.         myWebView.setWebViewClient(webviewcilnt);  


好把这里就解决了html里面调用java类实现的方法,,

 

下面说说 我这些QQ号和电话是从服务器获取的怎么添加到html上去。。这就是js的任务了

你看到我的html是没有什么布局,数据都是js生成出来的界面,。

怎么从java传到js里面呢  ?在java里面写myWebView.loadUrl("javascript:createTable('" + phon + "')");啦.

createTable(”“);就是js的function名字.记住这个myWebView.loadUrl("javascript:createTable('" + phon + "')")

在onCreate加应该是不行的需要酱紫

 

  1. myWebView.setWebViewClient(webviewcilnt);  
  2. ebViewClient webviewcilnt = new WebViewClient() {  
  3.     @Override  
  4.     public void onReceivedError(WebView view, int errorCode,  
  5.             String description, String failingUrl) {  
  6.   
  7.     }  
  8.   
  9.     @Override  
  10.     public void onPageFinished(WebView view, String url) {  
  11.         super.onPageFinished(view, url);  
  12.         String phon = loadHTMLData();  
  13.         myWebView.loadUrl("javascript:createTable('" + phon + "')");  
  14.         // 获取webview加载的html页面  
  15.         view.loadUrl("javascript:window.Android.getSource('<html>'+"  
  16.                 + "document.getElementsByTagName('html')[0].innerHTML+'</html>');");  
  17.   
  18.     }  
  19.   
  20.     @Override  
  21.     public void onPageStarted(WebView view, String url, Bitmap favicon) {  
  22.         super.onPageStarted(view, url, favicon);  
  23.     }  
  24. };  
分享到:
评论

相关推荐

    Android中WebView与HTML+Javascript的交互

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。而HTML和JavaScript则是构建网页的标准语言。将这三者结合,我们可以实现原生Android应用与Web内容的深度交互,创造出...

    Android Webview 和Javascript交互,实现Android和JavaScript相互调用

    更重要的是,Webview提供了与JavaScript交互的能力,使得Android应用能够与网页中的JavaScript代码进行通信,实现两者之间的深度集成。这种交互机制使得开发者可以充分利用HTML5的特性,同时结合Android原生功能,...

    android中Webview与javascript的交互(互相调用)

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。而JavaScript是构建网页的主流语言,两者之间的交互能力为开发者提供了更丰富的功能实现。本篇文章将详细探讨Android中...

    android与js基本交互

    1. **WebView组件**: Android中的`WebView`是实现Android与JavaScript交互的基础。它是一个可以加载和显示网页的视图,同时提供了与JavaScript交互的能力。 2. **loadUrl方法**: 使用`WebView.loadUrl("javascript:...

    Android WebViewJS应用源码.rar

    【Android WebViewJS应用源码】是一个关于在Android平台上利用WebView组件与JavaScript交互的示例项目。WebView是Android SDK提供的一种控件,它允许我们在应用程序中嵌入一个网页浏览器,从而展示网页内容或者运行...

    鸿蒙webview的使用和JS交互.zip

    4. **JavaScript交互** 要实现Webview与JavaScript的交互,鸿蒙系统提供了`addJavascriptInterface`方法,允许将Java对象暴露给JavaScript。例如,我们创建一个Java对象并添加到Webview: ```java ...

    webview与javascript交互相关技术.docx

    ### WebView与JavaScript交互相关技术详解 #### WebView与JavaScript概述 - **WebView简介**:WebView是Android SDK中的一个重要组件,它能够加载并展示Web内容。基于WebKit内核的浏览器引擎,WebView能够实现完整...

    Android webview加载网页.zip

    8. **注入自定义JavaScript接口**:通过`addJavascriptInterface()`方法,可以让JavaScript与Android原生代码交互。但需要注意安全问题,避免注入敏感接口。 9. **缓存策略**:使用`setCacheMode()`可以设置WebView...

    Android笔记webview与js交互

    WebView不仅能够展示HTML页面,还能与JavaScript进行交互,使得原生应用可以调用JavaScript代码,或者JavaScript可以调用Android的原生方法,实现两者之间的深度整合。本篇将详细讲解如何在Android中使用WebView进行...

    AndroidWebView.rar

    - **Android调用JavaScript**:使用`WebView.loadUrl("javascript:yourFunction()")`,可以执行JavaScript代码。 - **JavaScript调用Android**:通过`addJavascriptInterface()`方法创建一个Java对象,并将该对象...

    android4.4 WebView与js交互

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,并实现与JavaScript的交互。在Android 4.4(KitKat)版本中,WebView提供了更加强大的功能,使得Java与JavaScript之间的通信...

    android WebView通过Js和设备交互

    而“android WebView通过Js和设备交互”是指利用WebView实现JavaScript与Android原生代码之间的通信,以便让网页内容能够与设备的功能(如传感器)进行互动。在本场景中,特别提到了“摇一摇”功能的实现,意味着...

    Android WebView与JavaScript交互实现Web App

    总结起来,Android的WebView组件为我们提供了一种强大的方式来加载和展示HTML内容,并通过JavaScript与Android原生代码进行交互。这种方式对于开发混合应用或实现特定功能(如登录验证、分享等)非常有用。在实际...

    Android中Webview与原生界面交互及二维码扫描功能实现.zip

    这篇博客和对应的`WebViewDemo`示例代码着重讲解了如何在Android应用中使用WebView与原生界面进行交互,以及如何集成二维码扫描功能。以下是关于这两个主题的详细解释: ### 一、Android WebView的使用 1. **基本...

    Android高级应用源码-Android webView和js交互的Demo.zip

    这个"Android高级应用源码-Android webView和js交互的Demo.zip"是一个实例,演示了如何在Android应用中集成WebView并实现JavaScript与Android原生代码的交互。通过这种交互,开发者可以充分利用JavaScript的灵活性和...

    安卓webview的开发

    通过理解和熟练掌握Android Webview的开发,开发者能够利用丰富的Web技术快速构建功能丰富的Android应用,同时享受跨平台开发的优势。随着Web技术的不断进步,Webview在移动应用开发中的角色只会越来越重要。

    安卓Android源码——Android与js交互.zip

    这份“安卓Android源码——Android与js交互.zip”压缩包很可能包含了一个示例项目,用于演示如何在Android原生代码与JavaScript之间进行通信。下面将详细解释这一交互过程的关键知识点。 1. **WebView组件**: ...

    Android源码——WebViewJS应用源码_new_21.zip

    这个"Android源码——WebViewJS应用源码_new_21.zip"文件很可能是提供了一个示例项目,展示了如何在Android应用中使用WebView结合JavaScript进行交互。这个项目可能适用于那些想要学习或者增强在Android应用中使用...

    android java和webview交互demo

    **三、Android与JavaScript交互** 1. **注入JavaScript接口** Android可以向JavaScript注入对象,使得JavaScript能调用Android的方法。首先定义一个JavaScriptInterface类: ```java @JavascriptInterface ...

Global site tag (gtag.js) - Google Analytics