當前位置:首頁 » 安卓系統 » androidjs傳遞參數

androidjs傳遞參數

發布時間: 2025-01-17 12:51:54

㈠ 如何在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交互

java和js交互分為三種情況,分別是:

1 調用網頁上的js代碼

Android中可以通過webview來實現和js的交互,在程序中調用js代碼,只需要將webview控制項的支持js的屬性設置為true,,然後通過loadUrl就可以直接進行調用,如下所示:

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("javascript:test()");

2 網頁java代碼的方法

在網頁中調用java代碼,需要在webview控制項中添加javascriptInterface。如下所示:

mWebView.addJavascriptInterface(newObject(){
publicvoidclickOnAndroid(){
mHandler.post(newRunnable(){
publicvoidrun(){
Toast.makeText(Test.this,"測試調用java",Toast.LENGTH_LONG).show();
}
});
}
},"demo");

在網頁中,只需要像調用js方法一樣,進行調用就可以

<div id='b'><a onclick="window.demo.clickOnAndroid()">b.c</a></div>

3 Java代碼調用js並傳參

首先需要帶參數的js函數,如functiontest(str),然後只需在調用js時傳入參數即可,如下所示:

mWebView.loadUrl("javascript:test('aa')");

4.Js中調用java函數並傳參

首先一樣需要帶參數的函數形式,但需注意此處的參數需要final類型,即得到以後不可修改,如果需要修改其中的值,可以先設置中間變數,然後進行修改。如下所示:

mWebView.addJavascriptInterface(newObject(){
publicvoidclickOnAndroid(finalinti){
mHandler.post(newRunnable(){
publicvoidrun(){
intj=i;
j++;
Toast.makeText(Test.this,"測試調用java"+String.valueOf(j),Toast.LENGTH_LONG).show();
}
});
}
},"demo");

然後在html頁面中,利用如下代碼<divid='b'><aonclick="window.demo.clickOnAndroid(2)">b.c</a></div>,

下面是安卓無憂中js 與安卓相互調用的效果圖,可以網路一下安卓無憂,點擊源碼,看看裡面的源碼。

㈢ Android 與js 交互的目的

實現數據傳輸,完成交互操作。
JS代表的是網頁,這個網頁可以展示到Android、iOS或者pc的瀏覽器上,內嵌到程序里就是webview,是相對獨立的模塊,可以自成一套,但是有些數據或者操作在網頁完成比較麻煩,特別是手機上,比如登錄,需要單獨輸入賬號密碼,很是麻煩,現在都是由QQ微信授權登錄,一鍵完成,即使登錄了,登錄信息也不易持久保存(比如下次打開登錄信息就失效了),安全性也不高。
與Android或者iOS的交互主要是完成數據的交互,比如一個網頁查詢用戶數據需要登錄信息,APP已經登錄了,就可以直接中Android或者iOS的App直接拿,不需要在網頁再次登錄;比如用戶沒有登錄點擊了網頁登錄按鈕,js拉起App的原生登錄,這樣統一登錄路徑,登錄完成把數據回傳給js,完成登錄流程。比如評論,操作界面比較復雜,可能涉及圖片、表情、視頻的上傳下載,用網頁來做的話交互麻煩、性能也不理想,js上點擊評論拉起Android或者iOS的原生評論模塊,評論完畢通知js刷新數據,是比較理想的交互模式。

㈣ 在android中怎樣調用本地js文件里的方法並得到返回值

在android中調用本地js文件里的方法並得到返回值其方法如下: Android中內置了WebKit模塊,而該模塊的Java層視圖類就是WebView,所有需要使用Web瀏覽器功能的Android都需要創建該視圖類對象顯示和處理請求的網路資源。目前WebKit支持Http、Https、Ftp和JavaScript請求。下面是在Android中調用JavaScript方法以及如何在js中調用本地方法。 1、在Assets下放一個簡單的html文件jstest/apk/res/android" > <WebView android:id="@+id/wv_test" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/btn_showmsg"/> <Button android:id="@+id/btn_showmsg" android:layout_width="200dip" android:layout_height="40dip" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="調用html中js方法"/> </RelativeLayout> 3、然後是Activity,MainActivity.java package com.harold.jstest; import com.harold.base.JSKit; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.widget.Button; public class MainActivity extends Activity { private WebView mWebView; private Button btnShowInfo; private JSKit js; private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //初始化控制項 mWebView = (WebView) findViewById(R.id.wv_test); btnShowInfo = (Button) findViewById(R.id.btn_showmsg); //實例化js對象 js = new JSKit(this); //設置參數 mWebView.getSettings().setBuiltInZoomControls(true); //內容的渲染需要webviewChromClient去實現,設置webviewChromClient基類,解決js中alert不彈出的問題和其他內容渲染問題 mWebView.setWebChromeClient(new WebChromeClient()); mWebView.getSettings().setJavaScriptEnabled(true); //把js綁定到全局的myjs上,myjs的作用域是全局的,初始化後可隨處使用 mWebView.addJavascriptInterface(js, "myjs"); mWebView.loadUrl("file:///android_asset/jstest.html"); btnShowInfo.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mHandler.post(new Runnable() { @Override public void run() { //調用 HTML 中的javaScript 函數 mWebView.loadUrl("javascript:showMsg()"); } }); } }); } } 4、最後是綁定全局js的類JSKit.java package com.harold.base; import android.widget.Toast; import com.harold.jstest.MainActivity; public class JSKit { private MainActivity ma; public JSKit(MainActivity context) { this.ma = context; } public void showMsg(String msg) { Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show(); } } 例子比較簡單,代碼里都加了注釋,這里就不多說了,本示例用的本地的html,如果訪問網路中的網頁,別忘記在AndroidManifest.xml中加許可權 <uses-permission android:name="android.permission.INTERNET"/>

㈤ javascript調用android問題

onclick="window.Android.show()"
你的語法寫錯了,js調用Android要用window.TAG
這個TAG就是
webView.addJavascriptInterface(new Object(), TAG); // 設置javaScript可用於操作Activity類
看你的代碼,你傳遞了一個Android
因此你的js里應改成window.Android.show();

㈥ android js 交互 能傳json對象嗎

最近幾個項目的測試結果,Android無法主動通過調用
webview.loadUrl("javascript:"+callbackFunction+"('"+data+"')"); 這種方式將jsonobject類型的data傳給js,因為js那邊得到就是一個string的對象。

與此同時,js主動調用android的對象方式,android也無法返回給js一個jsonobject,需要js做一下轉換,例如:

Android 代碼:

[java] view plainprint?
WebView mWebView = (WebView) this.findViewById(R.id.webview);
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setPluginsEnabled(true);
settings.setAllowFileAccess(true);

settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);//不加上,會顯示白邊
String url="file:///android_asset/t.html"; //js代碼卸載t.html里
NavigationInstance navigation =new NavigationInstance(this);
mWebView.addJavascriptInterface(navigation, "Navigation");

NavigationInstance里的代碼:

[java] view plainprint?
@Override
public JSONObject GetManeuverInfo() {
try{
JSONObject test=new JSONObject();
test.put("maomao", "value");
return test;
//return new JSONObject(bean.ManeuverInfo);
}catch(Exception e){
Log.e(TAG, "",e);
}
return null;
}

t.html里的代碼:

[javascript] view plainprint?
function testAPI(el){
console.log("---------testAPI---------");
eval("var obj = "+Navigation.GetManeuverInfo());

alert('typeof:'+typeof(obj));
alert('maomao:'+obj.maomao);
alert('obj:'+obj);
}
如果直接寫成 Navigation.GetManeuverInfo.maomao是會提示undefined,因為js那邊只得到了一個string對象而已,它不知道maomao是個key。
通過eval將其轉化成表達式就可以調用obj.maomao得到value。

在此ps一下ios,貌似人家支持webview很好,js可以直接獲取到json對象.

㈦ android里如何調用Js里的函數

Android中內置了WebKit模塊,而該模塊的Java層視圖類就是WebView,所有需要使用Web瀏覽器功能的Android都需要創建該視圖類對象顯示和處理請求的網路資源。目前WebKit支持Http、Https、Ftp和JavaScript請求。


1、在Assets下放一個簡單的html文件jstest.html

<HTML>
<HEAD>
<metaname="viewport"content="width=device-width,target-densitydpi=device-dpi"/>
<METAhttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<script>
functionshowMsg(){
alert("helloworld!");
}
functionshowMsgInAndroid(){
myjs.showMsg('helloinandroid!');
}
</script>
</HEAD>
<BODY>
<span>測試js使用</span>
<buttonid='btntest'onclick='showMsgInAndroid()'>調用android方法</button>
</BODY>
</HTML>


2、布局文件main.xml

<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayout
android:id="@+id/rl_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<WebView
android:id="@+id/wv_test"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/btn_showmsg"/>
<Button
android:id="@+id/btn_showmsg"
android:layout_width="200dip"
android:layout_height="40dip"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="調用html中js方法"/>
</RelativeLayout>

3、然後是Activity,MainActivity.java


packagecom.harold.jstest;
importcom.harold.base.JSKit;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.webkit.WebChromeClient;
importandroid.webkit.WebView;
importandroid.widget.Button;
{
privateWebViewmWebView;
privateButtonbtnShowInfo;
privateJSKitjs;
privateHandlermHandler=newHandler();
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化控制項
mWebView=(WebView)findViewById(R.id.wv_test);
btnShowInfo=(Button)findViewById(R.id.btn_showmsg);
//實例化js對象
js=newJSKit(this);
//設置參數
mWebView.getSettings().setBuiltInZoomControls(true);
//內容的渲染需要webviewChromClient去實現,
//設置webviewChromClient基類,解決js中alert不彈出的問題和其他內容渲染問題
mWebView.setWebChromeClient(newWebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
//把js綁定到全局的myjs上,myjs的作用域是全局的,初始化後可隨處使用
mWebView.addJavascriptInterface(js,"myjs");
mWebView.loadUrl("file:///android_asset/jstest.html");
btnShowInfo.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
mHandler.post(newRunnable(){
@Override
publicvoidrun(){
//調用HTML中的javaScript函數
mWebView.loadUrl("javascript:showMsg()");
}
});
}
});
}
}
熱點內容
華為連接電視密碼是多少 發布:2025-03-20 05:31:11 瀏覽:491
演算法第五版 發布:2025-03-20 05:17:57 瀏覽:730
湖南台訪問 發布:2025-03-20 05:10:32 瀏覽:38
腳本和秒搶 發布:2025-03-20 05:06:29 瀏覽:591
b35鎖如何設置密碼 發布:2025-03-20 05:06:27 瀏覽:905
淘寶如何租雲伺服器 發布:2025-03-20 05:05:12 瀏覽:213
編程忌諱 發布:2025-03-20 04:58:35 瀏覽:427
國家知識產權專利資料庫 發布:2025-03-20 04:54:29 瀏覽:416
win7怎麼給文件夾設密碼 發布:2025-03-20 04:52:38 瀏覽:725
安卓手機電影怎麼投屏到ipad上 發布:2025-03-20 04:27:23 瀏覽:678