导航:首页 > 操作系统 > js调用android方法

js调用android方法

发布时间:2022-04-23 13:19:44

android怎样调用js文件里面的方法

android怎样调用js文件里面的方法
如果多个线程同时访问一个集合,而其中至少一个线程修改了该集合,那么它必须 保持外部同步。这通常是通过对自然封装该集合的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet 方法来“包装”集合。最好在创建时完成这一操作,以防止对 HashSet 实例进行意外的不同步访问:
Set s = Collections.synchronizedSet(new HashSet(...));

❷ js 中调用android中的方法,复杂参数怎么对应

webview中js调用本地java方法,这个功能实现起来稍微有点麻烦,不过也不怎么复杂,首先要对webview绑定javascriptInterface,js脚本通过这个接口来调用java代码。

contentWebView.addJavascriptInterface(this, "wst"); javainterface实际就是一个普通的java类,里面是我们本地实现的java代码, 将object 传递给webview,并指定别名,这样js脚本就可以通过我们给的这个别名来调用我们的方法,在上面的代码中,this是实例化的对象,wst是这个对象在js中的别名

❸ js怎么跟Android和ios进行交互

<script>
function view(id){
//alert(id);
myjs.passIdToApp(id);
// passIdApp(id);
}
< /script>

*******************************************************我是分割线****************************************************************

NSString *htmlPath=[[NSBundle mainBundle] resourcePath];
htmlPath=[htmlPath :@"Test.html"];
NSURL *localURL=[[NSURL alloc]initFileURLWithPath:htmlPath];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:localURL];

[self.mywebview loadRequest:request];
JSContext *context = [self.mywebview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"myjs.passIdToApp"] = ^() {
NSLog(@"Begin Log");
NSArray *args = [JSContext currentArguments];
for (JSValue *jsVal in args) {
NSLog(@"%@", jsVal);
NSString *proctID= [NSString stringWithFormat:@"%@",jsVal];
[self.navigationController pushViewController:[[Details_VC alloc]initWithProctID:proctID] animated:YES];
}
// JSValue *this = [JSContext currentThis];
NSLog(@"-------End Log-------");
};

*******************************************************我还是分割线****************************************************************

如果只调用passIdApp(id); 但是如果改成了myjs.passIdApp(id);就无法获取数据了

❹ JS怎样调用Android本地原生方法

NativeScript的工作原理:用JavaScript调用原生API实现跨平台 NativeScript是最近推出的一个跨平台解决方案,可以让你可以用JavaScript来直接写Android、iOS本地应用程序,未来还即将扩展到Windows平台。是最近比较受关注的项目。它与 nw (原名node-webkit ,用Web写winodw/linux桌面应用)和 phonegap内嵌webview写APP的实现方式有着本质的不同,它直接用JavaScript调用系统原生API,因而有一些原生应用的特点。 NativeScript是一个运行环境,可以让你使用通用的JavaScript代码,打造原生的iOS,Android和Windows(即将推出)应用程序。 NativeScript有很多很酷的功能,比如支持JavaScript对象双向绑定到原生UI组件,以及用CSS为原生应用程序写样式。但我最喜欢的功能是NativeScript可以让您直接访问本地平台的原生API。 注* 可以理解为NativeScript是一个JavaScript V8运行环境的命令转发代理,将JavaScript调用转发给不同平台上的原生API如Android、iOS,以及即将支持的Windows。 例如,看看这个NativeScript写的Android应用程序的代码: 123var time = new android.text.format.Time();time.set( 1, 0, 2015 );console.log( time.format( "%D" ) );你只需要一两分钟来分析一下就明白了,这段JavaScript代码实例化一个Java android.text.format.Time()对象,调用其set()方法,然后打印format后的返回值,是字符串“01/01/15”。 我知道你已经很激动了,先不要慌,让我们再来看看iOS的代码: 1234var alert = new UIAlertView();alert.message = "Hello world!";alert.addButtonWithTitle( "OK" );alert.show();这段JavaScript代码实例化一个Objective-C UIAlertView类,设置它的信息属性,然后调用它的addButtonWithTitle()和show()方法。当您运行这段代码,你会看到hello word的警告框。 如果你已经熟悉了npm的使用,NativeScript模块非常容易编写,分发和使用。就个人而言,作为一个Web开发人员,原生的iOS和Android代码让我害怕,尤其是当Java / Objective-C的API文档扔在一起的功能,它降低了我们跨平台开发的障碍。 还有HBuilder 也可以调用api

❺ android java怎么调用webview中js方法

Android平台上使用js调用java方法,主要是通过webview控件提供的 webview.addJavascriptInterface(new Person(this), "per"); 这个方法将java对象注入到js中,然后可以在js中通过调用该java对象的方法来实现回调,如下代码:
1.html文件,demo.html<html> <head> <script type="text/javascript" > function updateHtml(type,type2){ document.getElementById("content").innerHTML = "弹出对话框,测试"+type+type2; alert("dialog"); } </script> </head> <body> 这是一个js与android的例子 <a onClick="window.ceshi.startFunction()" href="">弹出对话框</a> 调用对象方法 <a onClick="per.print()" href="">调用对象方法</a> <span id="content"></span> </body> </html>

❻ 在android中怎样调用本地js文件里的方法并得到返回值

您好,很高兴能帮助您,
Android中webview和js之间的交互
1.android中利用webview调用网页上的js代码。
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("javascript:test()");
2. 网页上调用android中java代码的方法
在网页中调用java代码,需要在webview控件中添加javascriptInterface。如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
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函数,如function test(str),然后只需在调用js时传入参数即可,如下所示:
mWebView.loadUrl("javascript:test('aa')");
4.Js中调用java函数并传参
首先一样需要带参数的函数形式,但需注意此处的参数需要final类型,即得到以后不可修改,如果需要修改其中的值,可以先设置中间变量,然后进行修改。如下所示:
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid(final int i) {
mHandler.post(new Runnable() {
public void run() {
int j = i;
j++;
Toast.makeText(Test.this, "测试调用java" + String.valueOf(j), Toast.LENGTH_LONG).show();
}
});
}
}, "demo");
然后在html页面中,利用如下代码<div id='b'><a onclick="window.demo.clickOnAndroid(2)">b.c</a></div>,
即可实现调用
你的采纳是我前进的动力,还有不懂的地方,请你继续“追问”!
如你还有别的问题,可另外向我求助;答题不易,互相理解,互相帮助!

❼ 怎么在web工程的jsp页面的js中调用android工程的中的activity中的方法

通过webview打开jsp页面,然后与activity进行交互。

步骤

第一步:设置支持脚本

mWebView=(WebView)findViewById(R.id.webview);
WebSettingswebSettings=mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);//设置webview支持脚本

第二步:在activity中给webview增加js交互external接口demo

mWebView.addJavascriptInterface(newDemoJavaScriptInterface(),"demo");//增加js接口交互external别名demo
{
DemoJavaScriptInterface(){
}
publicvoidclickOnAndroid(){
}
}

第三步:js访问activity

<aonClick="window.demo.clickOnAndroid()">单击我访问activity的方法</a>

❽ 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()");
}
});
}
});
}
}

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

在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法。它的使用方法很简单:
var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)

在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回值。下面介绍的类名和方法签名可能会有一点奇怪,但是Java的规范就是如此的。
类名
参数中的类名必须是包含Java包路径的完整类名,例如我们在org.cocos2dx.javascript这个包下面写了一个Test类:
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种:

Java类型
签名

int I
float F
boolean Z
String Ljava/lang/String;
参数
参数可以是0个或任意多个,直接使用js中的number,bool和string就可以。
使用示例
我们将会调用上面的Test类中的静态方法:
//调用hello方法
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "hello", "(Ljava/lang/String;)V", "this is a message from js");

//调用第一个sum方法
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(II)I", 3, 7);
cc.log(result); //10

//调用第二个sum方法
var result = jsb.reflection.callStaticMethod("org/cocos2dx/javascript/Test", "sum", "(I)I", 3);
cc.log(result); //5

在你的控制台会有正确的输出的,这很简单吧。
注意
另外有一点需要注意的就是,在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的,所以如果我们在js中调用的Java方法有任何刷新UI的操作,都需要在ui线程进行。
例如,在下面的例子中我们会调用一个Java方法,它弹出一个android的Alert对话框。
//给我们熟悉的AppActivity类稍微加点东西
public class AppActivity extends Cocos2dxActivity {

private static AppActivity app = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = this;
}

public static void showAlertDialog(final String title,final String message) {

//这里一定要使用runOnUiThread
app.runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog alertDialog = new AlertDialog.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对话框了。
再加点料
现在我们可以从js调用Java了,那么能不能反过来?当然可以!
在你的项目中包含Cocos2dxJavascriptJavaBridge,这个类有一个evalString方法可以执行js代码,它位于frameworks\js-bindings\bindings\manual\platform\android\java\src\org\cocos2dx\lib文件夹下。我们将会给刚才的Alert对话框增加一个按钮,并在它的响应中执行js。和上面的情况相反,这次执行js代码必须在gl线程中进行。
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//一定要在GL线程中执行
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString("cc.log(\"Javascript Java bridge!\")");
}
});
}
});

这样在点击OK按钮后,你应该可以在控制台看到正确的输出。evalString可以执行任何js代码,并且它可以访问到你在js代码中的对象。

阅读全文

与js调用android方法相关的资料

热点内容
centos开机命令行模式 浏览:695
遍历所有listpython 浏览:660
力控加密文件夹 浏览:515
如何更改移动服务器密码 浏览:686
苹果8p手机加密 浏览:749
ipad建文件夹怎么弄 浏览:833
iphone13对wap3加密 浏览:555
pdf文件打开失败 浏览:913
dubbo怎么调用不同服务器接口 浏览:40
全能解压王app历史版本 浏览:75
优先队列与拓扑排序算法 浏览:281
pdf转换formacbook 浏览:871
pdf文件内容怎么编辑 浏览:48
134压缩机排气温度多少 浏览:256
unity等待编译后 浏览:806
黑鲨手机锁屏视频在哪个文件夹 浏览:781
wow地图解压后怎么压缩 浏览:823
有pdf却打不开 浏览:461
七星彩软件app怎么下载 浏览:219
32单片机的重映射哪里改 浏览:818