Android与JavaScrip进行交互(一)

一、JS代码如下

demo2.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
	<title>veikr的博客 </title>
	<meta name="generator" content="WordPress 3.5.1" />
	<meta name="wap-version" content="1.10 (2008.8.3)" />
	<link rel="alternate" type="application/rss+xml" title="veikr的博客 RSS Feed" href="http://veikr.com/feed" />
	<link rel="pingback" href="http://veikr.com/xmlrpc.php" />
	<link rel="shortcut icon" href="http://veikr.com/wp-content/themes/twentyten/favicon.ico" type="image/x-icon" />
	<link rel="stylesheet" href="wap.css" type="text/css" media="all" />
</head>
	<body>

		<input type="button" id="testbtn" value="我是按钮1"
<pre name="code" class="html"><span style="white-space:pre">		</span>onClick="window.demo.clickButton()"<span style="font-family: Arial, Helvetica, sans-serif;">	</span>

onClick="test2()"/><input onClick="test()" type="button" id="testbtn2" value="我是按钮2"/></body><script language="javascript">function test(){ alert("点击了按钮2"); }function test2(){ alert("点击了按钮1"); }function wave() { alert("点击了andorid中的按钮");}</script>
</html>


上面的按钮1设置了2个点击事件的方法,1个是android中的方法,1个是JS中的方法,但是点击事件只会响应一次。

这里将android中的方法放在前面。在浏览器打开这个html文件,点击按钮1,响应事件从前往后查找,放在前面的是andoid中的方法,浏览器中自然找不到,所以不会响应;继续向后查找,第二个点击事件是JS中的方法,可以执行,所以予以响应。在app中运行,找到的第一个方法就是可执行的方法,所以予以响应,后面的点击事件方法虽然可以执行,但是由于点击事件已经响应了,所以不再执行。

二、实现功能

1.点击andorid中的按钮响应JS中的方法

2.点击JS中按钮响应Android中的方法

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/mCallJS"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CallJs" />

    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

MethodMutual2.java

package com.example.mutal;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;

public class MethodMutual2 extends Activity {

	private WebView mWebView;
	private static final String LOG_TAG = "WebViewDemo";

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		loadAssetHtml();
	}

	public void loadAssetHtml() {
		mWebView = (WebView) findViewById(R.id.webview);
		WebSettings webSettings = mWebView.getSettings();
		webSettings.setSavePassword(false);
		webSettings.setSaveFormData(false);
		webSettings.setJavaScriptEnabled(true);
		webSettings.setSupportZoom(false);
		mWebView.setWebChromeClient(new MyWebChromeClient());
		// 将一个java对象绑定到一个javascript对象中,javascript对象名就是interfaceName,作用域是Global.
		mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
		mWebView.loadUrl("file:///android_asset/demo2.html");
		// 通过应用中按钮点击触发JS函数响应
		Button mCallJS = (Button) findViewById(R.id.mCallJS);
		mCallJS.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				mWebView.loadUrl("javascript:wave()");
			}
		});
	}

	private int i = 0;

	final class DemoJavaScriptInterface {
		DemoJavaScriptInterface() {
		}

		/**
		 * This is not called on the UI thread. Post a runnable to invoke
		 * loadUrl on the UI thread.
		 */
		public void clickButton() {
			new AlertDialog.Builder(MethodMutual2.this).setMessage("你点击的是按钮2").create().show();
		}
	}

	/**
	 * Provides a hook for calling "alert" from javascript. Useful for debugging
	 * your javascript.
	 */
	final class MyWebChromeClient extends WebChromeClient {
		@Override
		public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
			// 自己拦截对话框处理
			// Toast.makeText(getApplicationContext(), message, 0).show();
			// result.confirm();
			// return true;
			// 使用js对话框
			return super.onJsAlert(view, url, message, result);
		}
	}
}

分析:

点击android按钮--响应JS中的wave()方法

点击按钮1--android app中响应clickButton()方法;浏览器中响应JS中的test2()方法

点击按钮2-响应JS中的test()方法

时间: 2024-10-19 09:58:41

Android与JavaScrip进行交互(一)的相关文章

Android与JavaScrip进行交互(二)

一.思路分析 经过测试发现,JS中的点击事件只能写一个,如果写了多个,也只会响应第一个,如果写的方法是android端的方法,在web端运行时,后台会报未定义这个方法的错误,前台点击无响应. 所以,如果想要web中某个按钮在web端响应的是JS中的方法,而在android端响应的是android端的方法,就需要自己在页面加载完毕时,手动注入JS函数监听. 二.代码 demo3.html 该段代码是放在assets文件夹下的 <?xml version="1.0" encoding

Android与服务器端数据交互(基于SOAP协议整合android+webservice)

此文出自:http://www.cnblogs.com/zhangdongzi/archive/2011/04/19/2020688.html 上一节中我们通过http协议,采用HttpClient向服务器端action请求数据.当然调用服务器端方法获取数据并不止这一种.WebService也可以为我们提供所需数据, 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起. 我们在PC机器java客

【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(3-1)Android 和 Service 的交互之GET方式

好久没更新了,罪过罪过.最对不起的人莫过于那些支持和等待在下拙文的诸位,在此道一声抱歉.管窥之见,侥幸博得各位认同,给了我莫大的鼓励. 话休絮烦,文接前章. 到[一步一个脚印]Tomcat+MySQL为自己的APP打造服务器(2-3)Servlet连接MySQL数据库为止,我们已经将服务端的部分走通了:通过 Servlet 连接 MySQL ,分析业务需求进行响应的增删改查操作返回对应的处理结果.(上一篇结尾是说接下来该说POST请求了,但是在准备这篇文章时发现POST再推后一篇,等我们把 An

高德地图组件在Android的应用以及Android与JavaScript的交互

最近在慕课网学习了关于高德地图组件的课程(其实就是一个广告,内容和官网的API完全一样),发现这个JavaScript API比Android API简单方便多了,于是就打算放在Android APP上来实现,花了一点小功夫,但是最终还是实现了,后来打算扩展的时候遇到个问题:就是高德官网有一个坐标拾取点(高德的坐标和我们平时取的坐标不一样,可以将高德坐标理解为中国的国标,直接获取的坐标是国际标准的坐标),后来发现有html文件直接实现了这个功能,于是就把这个html扒出来了,但是重点问题来了:如

Android研究之手势交互实例实现详解

 先来几张效果图: 一.没有抛掷: 二.向右抛掷一次 三.向右再抛掷一次 接下来说说Android开发中对于手势动作的识别参考资料... 首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件. 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象. 3. 通过GestureDetector(手势识别器)转发次MotionEvent对象至OnGestureList

android客户端与服务器交互数据(基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合)

在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVA ME的人都知道有KSOAP这个第三方的类库,可以帮助我们获取服务器端webService调用,当然KSOAP已经提供了基于android版本的jar包 首先下载KSOAP包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包 然后新建android项目 以

Delphi中Android运行和JNI交互分析

Androidapi.JNIBridge负责和JNI交互.,既然要交互,那么首先就是需要获得JNI的运行环境,Android本身内置的就有一个Java(Dalvik)虚拟机.所以这个第一步就肯定是要这个虚拟机和我们当前的运行线程环境关联.这时候Androidapi.JNIBridge中的TJNIResolver就出场了.GetJNIEnv这个函数就是, [delphi] view plaincopy class function TJNIResolver.GetJNIEnv: PJNIEnv;

Android WebView与JavaScript交互操作(Demo)

应用场景: 为了使Android移动项目能够在较短的时间内完成开发,同时降低技术人员开发的成本投入,往往会采用Hybrid APP的开发模式.相关Hybrid APP(混合型应用)参看:http://blog.csdn.net/mahoking/article/details/30235243 采用这种模式,为了解决更好的用户体验,可访问本地资源的能力.势必需要了解与掌握Android(java)与JavaScript之间的交互.相互调用操作的方法与技术. [转载使用,请注明出处:http://

OSChina客户端源码学习(1)--Android与Server的交互

这里主要针对"综合"这个选项卡下的"资讯"模块为例子,对核心代码进行解读. 准备工作:参考我的另外一篇博客 http://blog.csdn.net/csp277/article/details/46610893 然后点击下面的类 Class AsyncHttpResponseHandler 第一步:定义AsyncHttpResponseHandler,该handler对象将作为Http请求的参数 protected AsyncHttpResponseHandler