`
yoyotota
  • 浏览: 63609 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Android平台,如何调用javascript操作网页和js调用系统功能

阅读更多
预期效果:1、java编程实现显示一个网页显示(list,list中有电话号码),网页中的数据内容由程序传过去。
          2、点击网页中的电话号码部分,调用手机的打电话界面。
如图:



具体实现:
1、在assets中定义index.html文件,这个文件中table中的数据由javascript生成
ps:
(1)contactlist(jsons)将由java程序调用
(2)onload="javascript:myjavascript.show():javascript调用java程序,详情见下文
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<SCRIPT LANGUAGE="JavaScript">
<!--
  function contactlist(jsons){
  var table=document.getElementById("contactTable");//获得html中Table
  var arr = eval(jsons);//将jsons字符串转换为json对象数组
  for(var i=0;i < arr.length;i++){
	var jsonObj = arr[i];
	var tr = table.insertRow(table.rows.length);//添加tr
	var td1 = tr.insertCell(0);//td
	var td2 = tr.insertCell(1);
	td2.align = "center";
	var td3 = tr.insertCell(2);

	td1.innerHTML = jsonObj.id;//设置每列对应的值
	td2.innerHTML = jsonObj.name;
	td3.innerHTML = jsonObj.phone;
	}
  }

  //-->
</SCRIPT>
 <BODY onload="javascript:myjavascript.show()">
   <table width="100%" border="0" cellspacing="0" id="contactTable">
	<tr>
	  <td width="20%">编号</td>
	  <td width="center">姓名</td>
	  <td width="30%">电话</td>
	</tr>
   </table>
 </BODY>
</HTML>


2、下面是java程序代码,首先是布局文件,很简单,就是一个webview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<WebView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/webview"
    />
</LinearLayout>


3、HtmlUIActivity类,这个类负责html的加载显示、添加javascript支持,提供给javascript调用接口。
/**
 * HTML ui类 
 */
public class HtmlUIActivity extends Activity {
	private WebView webView;
	private Handler handler = new Handler();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.main);
        webView = (WebView)findViewById(R.id.webview);
       //重要:让webview支持javascript
        webView.getSettings().setJavaScriptEnabled(true);
       //重要:添加可以供html中可供javascript调用的接口类
        webView.addJavascriptInterface(new MyJavaScript(this, handler), "myjavascript");
        //加载index.html
        webView.loadUrl("file:///android_asset/index.html");
    }
}


4、MyJavaScript负责提供数据并显示html

public class MyJavaScript {
	private WebView webview;
	//使用一个handler来处理加载事件
	private Handler handler;
	public MyJavaScript(Context context,Handler handler){
		this.handler = handler;
		webview = (WebView) ((Activity)context).findViewById(R.id.webview);
	}
	/*
	 * java调用显示网页,异步
	 */
	public void show(){
	  handler.post(new Runnable() {			
	    public void run() {
		重要:url的生成,传递数据给网页
	        String url = "javascript:contactlist('" + generateData() + "')";
	       webview.loadUrl(url);
	    }
	   });
	}
	/*
	 * 由java程序生成数据传到网页中显示
	 */
	private String generateData(){
	  try {
		//构造一个json对象
		JSONObject obj1 = new JSONObject();
		obj1.put("id", 12);
		obj1.put("name", "tom");
		obj1.put("phone", "66666666");
			
		JSONObject obj2 = new JSONObject();
		obj2.put("id", 13);
		obj2.put("name", "jerry");
		obj2.put("phone", "88888888");
			
		//将构造好的2个json对象加入到json数组中
		JSONArray arr = new JSONArray();
		arr.put(obj1);
		arr.put(obj2);
		return arr.toString();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "";
	}
}


至此,java程序与javascript之间的双向调用已经完成了。至于我们预期目标的第2项,只需要:  
(1)、在MyJavaScript类中添加方法
    /*
    * 拨打电话方法
    */
  public void call(final String phone){
         Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phone));
context.startActivity(intent);
   }
 
   (2)、在index.html中将
   
 td3.innerHTML = jsonObj.phone;

   修改为:
td3.innerHTML = "<a href=\"javascript:myjavascript.call('"+jsonObj.phone + "')\">" + jsonObj.phone + "</a>";

   最后记得加上打电话的权限:
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
  • 大小: 7.9 KB
分享到:
评论
4 楼 cheung张 2012-07-12  
为什么的我的html里面的js多了,得到参数的那个方法在js中为什么不执行了!
3 楼 zhjpmomo 2011-12-23  
楼主能不能传个demo啊。这样看着很费劲啊
2 楼 zhjpmomo 2011-12-23  
ublic void call(final String phone){  
      Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phone));  
text.startActivity(intent);  
}


楼主截图能不能不漏字啊
1 楼 xjx_hello 2011-08-18  
 

相关推荐

    xe7android手机调用javascript

    二、JavaScript调用Android 1. `WebView`的`addJavascriptInterface()`:如上所述,当创建了`JavaScriptInterface`后,JavaScript可以通过window对象访问它: ```javascript window.Android.callFromJS("这是来自...

    Android调用JavaScript.zip

    "Android调用JavaScript.zip"这个压缩包可能包含了关于如何在Android中调用JavaScript代码的相关示例和资源。下面我们将深入探讨这一主题。 1. **WebView组件** Android中的WebView是一个可以加载和显示网页的控件...

    android和js相互调用

    ### JavaScript调用Android 要使JavaScript能够调用Android方法,你需要实现`WebViewClient`并重写`shouldOverrideUrlLoading()`方法。在这个方法中,你可以识别特定的URL模式并执行相应的Android代码。比如,定义...

    android webview中使用Java调用JavaScript方法并获取返回值

    如果需要在WebView中启用JavaScript调用Android代码的功能,还要在addJavascriptInterface()方法中声明一个Java类的实例,并为其指定一个可以在JavaScript中访问的接口名字。 在Java代码中定义一个内部类,用于接收...

    android 浏览器 调用系统下载功能

    在Android平台上,开发一款浏览器应用并集成下载功能是一项常见的任务。这个话题主要涉及以下几个关键知识点: 1. **Android浏览器架构**:Android浏览器通常基于WebView组件构建。WebView是Android SDK提供的一种...

    android通过js调用安卓系统功能.zip

    在Android应用开发中,通过JavaScript调用安卓系统功能是一种常见的技术实践,这使得Web开发者能够利用WebView组件,结合JavaScript和原生代码,实现更丰富的交互体验。本项目提供的"android通过js调用安卓系统功能....

    Android调用JavaScript_android源码.zip

    在Android源码中,`WebView`的JavaScript调用主要由`WebViewCore`和`Chromium`组件负责。`WebViewCore`是Android早期版本的渲染引擎,而在Android 4.4及以后版本,Google引入了Chromium作为WebView的内核,提供了更...

    android通过js调用安卓系统功能_Android源码.zip

    总结起来,Android通过JavaScript调用系统功能主要依赖于`WebView`的`addJavascriptInterface`方法,通过创建和暴露一个实现了`JavascriptInterface`的Java对象,可以让JavaScript与Android应用进行深度交互。...

    Android代码-android通过js调用安卓系统功能.rar

    总结起来,这个压缩包提供的示例展示了如何在Android应用中使用WebView组件,通过JavaScript Interface与JavaScript进行交互,实现从网页调用Android系统的特定功能。这对于开发混合型应用或者增强网页应用功能的...

    android JS与java代码相互调用

    - **线程安全**:JavaScript调用Java方法时,由于执行在Web线程中,如果涉及到UI更新,必须使用`runOnUiThread()`确保操作在主线程执行,否则会抛出`CalledFromWrongThreadException`异常。 - **安全性**:出于...

    Android应用源码之android通过js调用安卓系统功能.zip

    在Android应用开发中,有时我们需要实现网页(HTML)与原生Android系统功能的交互,例如通过JavaScript调用Android系统的一些特定功能。这个压缩包“Android应用源码之android通过js调用安卓系统功能.zip”提供了...

    Android和JavaScript互相调用

    2. 对于JavaScript调用Android,可以通过`postMessage()`和`WebChromeClient.onJsPrompt()`实现异步回调。JavaScript发送消息到Android,Android接收到消息后执行相应操作,并通过`WebChromeClient.onJsPrompt()`的...

    Android中调用js方法及js中调用本地方法

    安全注意事项:虽然JavaScriptInterface提供了便利,但请注意,从JavaScript直接调用Android方法可能会带来安全风险,因为恶意的JavaScript代码可能尝试执行敏感操作。因此,确保仅暴露不具威胁性的方法,并遵循最佳...

    android和javascript互相调用

    JavaScript调用Android: 在HTML(或JavaScript)中,我们可以直接通过添加的接口名来调用Android的方法。例如,如果我们像上面那样将Java对象暴露为"android",则可以在JavaScript中这样调用: ```javascript ()"&gt;...

    安卓Android源码——安卓Android调用JavaScript.rar

    首先,Android提供了一个名为WebView的组件,它是Android系统内置的浏览器内核,可以用来加载和显示网页内容。WebView不仅能够展示HTML、CSS和JavaScript,还允许Android应用通过Java代码与网页中的JavaScript进行...

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

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

    android、js互相调用

    **二、JavaScript调用Android** 1. **注入JavaScript接口**: 通过`addJavascriptInterface()`暴露的Java对象,JavaScript可以直接调用其方法。例如,我们在Java中定义了一个名为`callAndroid()`的方法,JavaScript...

    Android javascript 调用本地Java函数

    在Android开发中,JavaScript与本地Java代码的交互是...总的来说,Android JavaScript调用本地Java函数是Android混合开发中的重要技术,通过合理的接口设计和性能优化,可以构建出既有原生体验又有Web灵活性的应用。

Global site tag (gtag.js) - Google Analytics