導航:首頁 > 編程語言 > 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光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163