导航:首页 > 编程语言 > androidjava调用js

androidjava调用js

发布时间:2022-12-16 19:13:23

Ⅰ 在android上怎样实现java和JS交互

在Android的开发过程中、遇到一个新需求、那就是让Java代码和Javascript代码进行交互、在IOS中实现起来很麻烦、而在Android中相对来说容易、Android对这种交互进行很好的封装、其实可以很简单的用Java代码调用WebView中的js函数、也可以用WebView中的js来调用Android应用中的Java代码

一、网页的JS代码调用ANDROID中JAVA代码的方法

在网页中调用java代码、需要在webview控件中添加javascriptInterface

contentWebView = (WebView) findViewById(R.id.webview);

//启用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js对象名");

在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以的。

public void jsFunction(final String str) {

Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里对Android应用的UI进行处理
}
});
}

在网页中、只需要像调用js方法一样、进行调用就可以

<a onClick="window.js对象名.jsFunction(´hello world´)" >

点击调用java代码并传递参数
</a>

二、ANDROID中JAVA代码调用网页的JS代码的方法

Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样

// 无参数调用

contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");

三、JAVA和JS交互注意事项

1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法

2、Java 调用 js 的函数、没有返回值、调用就控制不到

3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间

4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验

Ⅱ 如何在android平台上使用js直接调用Java方法

在Cocos2d-js 3.0beta中加入了一个新特性,在Android平台上我们可以通过反射直接在js中调用java的静态方法。它的使用方法很简单:


1 var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)


在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回值。下面介绍的类名和方法签名可能会有一点奇怪,但是Java的规范就是如此的。


类名


参数中的类名必须是包含Java包路径的完整类名,例如我们在org.cocos2dx.javascript这个包下面写了一个Test类:


123456789101112 package org.cocos2dx.javascript;public class Test { public static void hello(String msg){ System.out.println(msg); } public static int sum(int a, int b){ return a + b; } public static int sum(int a){ return a + 2; }}


那么这个Test类的完整类名应该是org/cocos2dx/javascript/Test,注意这里必须是斜线/,而不是在Java代码中我们习惯的点。


方法名


方法名很简单,就是方法本来的名字,例如sum方法的名字就是sum。


方法签名


方法签名稍微有一点复杂,最简单的方法签名是()V,它表示一个没有参数没有返回值的方法。其他一些例子:


(I)V表示参数为一个int,没有返回值的方法;


(I)I表示参数为一个int,返回值为int的方法;


(IF)Z表示参数为一个int和一个float,返回值为boolean的方法;


现在有一些理解了吧,括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为Java是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。


目前Cocos2d-js中支持的Java类型签名有下面4种:

Ⅲ 如何在JAVASCRIPT调用Android JAVA函数

一、网页的JS代码调用ANDROID中JAVA代码的方法
在网页中调用java代码、需要在webview控件中添加javascriptInterface
contentWebView = (WebView) findViewById(R.id.webview);
//启用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js对象名");

在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里对Android应用的UI进行处理
}
});
}

在网页中、只需要像调用js方法一样、进行调用就可以
<a onClick="window.js对象名.jsFunction(´hello world´)" >
点击调用java代码并传递参数
</a>

二、ANDROID中JAVA代码调用网页的JS代码的方法

Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样而已

// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");

三、JAVA和JS交互注意事项
1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法
2、Java 调用 js 的函数、没有返回值、调用了就控制不到了
3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间
4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验。

Ⅳ 在Android上怎样实现JAVA和JS交互

Java代码mWebview.getSettings().setJavas criptEnabled(true);
然后是设置webview要加载的网页:
web的网页:webView.loadUrl(" ");
本地的网页:webView.loadUrl("file:///android_asset/XX.html"); //本地的存放在:assets文件夹
webview做完基本的初始化后我们还要要给它,加进一个回调的代理类Javas criptInterface,并给它一个调用的名称:ncp
Java代码
mWebView.addJavas criptInterface(new Javas criptInterface(),"ncp");

Javas criptInterface可以是一个普通的Java类,类实现的方法,均可被js回调:
Java代码

final class Javas criptInterface {
public int callOnJs() {
return 1000;
}
public void callOnJs2(String mode) {
//TODO
}
}

Java要调用js的方法,只需知道js的方法名称即可:
Java代码
mWebView.loadUrl("javas cript:onSaveCallback()");
js 这边就更简单:
Js代码

window.onload = function(){
document.getElementById('btn_1').addEventListener('click', onBtnClick, false);
var _int_value = window.ncp.callOnJs();
alert("get int from java:" + _int_value );
}
function onBtnClick() {
window.ncp.callOnJs2("click");
}

Ⅳ 如何在Android平台上使用JS直接调用Java方法

在Cocos2d-js 3.0beta中加入了一个新特性,在Android平台上我们可以通过反射直接在js中调用Java的静态方法。使用方法很简单:

那么这个Test类的完整类名应该是org/cocos2dx/javascript/Test,注意这里必须是斜线/,而不是在Java代码中习惯的点。

(2)方法名

方法名很简单,就是方法本来的名字,例如sum方法的名字就是sum。

(3)方法签名

方法签名稍微有一点复杂,最简单的方法签名是()V,表示一个没有参数没有返回值的方法。其他一些例子:

(I)V表示参数为一个int,没有返回值的方法;

(I)I表示参数为一个int,返回值为int的方法;

(IF)Z表示参数为一个int和一个float,返回值为boolean的方法;

现在有一些理解了吧,括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为Java是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。

(4)参数

参数可以是0个或任意多个,直接使用js中的number,bool和string就可以。

(5)使用示例

将会调用上面的Test类中的静态方法:

//调用hello方法

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test","hello","(Ljava/lang/String)V","thisisamessagefromjs");

//调用第一个sum方法

varresult=jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test","sum","(II)I",3,7);

cc.log(result);//10

//调用第二个sum方法

varresult=jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test","sum","(I)I",3);

cc.log(result);//5

(6)注意

另外有一点需要注意的就是,在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的,所以如果在js中调用的Java方法有任何刷新UI的操作,都需要在ui线程进行。

例如,在下面的例子中会调用一个Java方法,弹出一个android的Alert对话框。

//给我们熟悉的AppActivity类稍微加点东西

{

privatestaticAppActivityapp=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

app=this;

}

(finalStringtitle,finalStringmessage){

//这里一定要使用runOnUiThread

app.runOnUiThread(newRunnable(){

@Override

publicvoidrun(){

AlertDialogalertDialog=newAlertDialog.Builder(app).create();

alertDialog.setTitle(title);

alertDialog.setMessage(message);

alertDialog.setIcon(R.drawable.icon);

alertDialog.show();

}

});

}

}


在js中调用

jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity","showAlertDialog","(Ljava/lang/String;Ljava/lang/String;)V","title","hahahahha");

这样调用就可以看到一个android原生的Alert对话框了。

Ⅵ 在Android上怎样实现JAVA和JS交互

JS调用JAVA:通过addJavascriptInterface注册函数供JS调用,例如:

在Android代码中:
mWebView.addJavascriptInterface(newObject(){

@JavascriptInterface
publicbooleanisOnline(){
return1;
}
@JavascriptInterface
publicbooleantest(Stringmsg){
return"hello"+msg;
}

},"AndroidMain");

在js代码中调用:
varonline=window.AndroidMain.isOnline();
vartest=window.AndroidMain.test("ttt");



JAVA调用JS:使用loadURL调用JS的函数:

mWebView.loadURL("Javascript:alert('提示。。')")
阅读全文

与androidjava调用js相关的资料

热点内容
dvd光盘存储汉子算法 浏览:758
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:672
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:486
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:383
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163