当前位置:首页 » 安卓系统 » js调用android

js调用android

发布时间: 2025-02-16 22:17:50

1. javascript调用android问题

onclick="window.Android.show()"
你的语法写错了,js调用Android要用window.TAG
这个TAG就是
webView.addJavascriptInterface(new Object(), TAG); // 设置javaScript可用于操作Activity类
看你的代码,你传递了一个Android
因此你的js里应改成window.Android.show();

2. android 镐庝箞阃氲繃js璋幂敤镓嬫満阃氲褰

镐濊矾锛

1銆乯s璋幂敤android镄刯ava浠g爜

2銆侀氲繃java浠g爜璁块梾阃氲褰

3銆侀氲繃java浠g爜璁块梾js浠g爜杩斿洖阃氲褰曚俊鎭

浠g爜锛

1銆乯s璋幂敤android镄刯ava浠g爜

js浠g爜锛

window.ncp.callOnJs2("click");

android浠g爜锛岄氲繃webview镓揿紑椤甸溃锛

mWebview.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(newJavaScriptInterface(),"ncp");
finalclassJavaScriptInterface{
publicintcallOnJs(){
return1000;
}
publicvoidcallOnJs2(Stringmode){
//TODO
}
}

2銆侀氲繃java浠g爜璁块梾阃氲褰

/**寰楀埌镓嬫満阃氲褰曡仈绯讳汉淇℃伅**/
privatevoidgetPhoneContacts(){
ContentResolverresolver=mContext.getContentResolver();

//銮峰彇镓嬫満镵旂郴浜
CursorphoneCursor=resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION,null,null,null);


if(phoneCursor!=null){
while(phoneCursor.moveToNext()){

//寰楀埌镓嬫満鍙风爜
StringphoneNumber=phoneCursor.getString(PHONES_NUMBER_INDEX);
//褰撴坠链哄彿镰佷负绌虹殑鎴栬呬负绌哄瓧娈璺宠繃褰揿墠寰鐜
if(TextUtils.isEmpty(phoneNumber))
continue;

//寰楀埌镵旂郴浜哄悕绉
StringcontactName=phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);

//寰楀埌镵旂郴浜篒D
Longcontactid=phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);

//寰楀埌镵旂郴浜哄ご镀廔D
Longphotoid=phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);

//寰楀埌镵旂郴浜哄ご镀厦itamp
BitmapcontactPhoto=null;

//photoid澶т簬0琛ㄧず镵旂郴浜烘湁澶村儚濡傛灉娌℃湁缁欐や汉璁剧疆澶村儚鍒欑粰浠栦竴涓榛樿ょ殑
if(photoid>0){
Uriuri=ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);
InputStreaminput=ContactsContract.Contacts.openContactPhotoInputStream(resolver,uri);
contactPhoto=BitmapFactory.decodeStream(input);
}else{
contactPhoto=BitmapFactory.decodeResource(getResources(),R.drawable.contact_photo);
}

mContactsName.add(contactName);
mContactsNumber.add(phoneNumber);
mContactsPhonto.add(contactPhoto);
}

phoneCursor.close();
}

3銆侀氲繃java浠g爜璁块梾js浠g爜杩斿洖阃氲褰曚俊鎭

mWebView.loadUrl("javascript:onSaveCallback()");

3. 安卓原生和js交互的4种方式 java和js交互 安卓JsBridge原理解析

JsBridge是实现Android与JavaScript交互的流行方式,共有四种方法可以实现数据传递。第一种方法是通过`addJavascriptInterface`实现JS调用Android。此方法使用`public void addJavascriptInterface(Object object, String name) {}`,其中`object`为Android对象,`name`为其别名。例如,`webview.addJavascriptInterface(JavaH5Activity.this, "androidObject");`将JavaH5Activity实例命名为androidObject传递给JS。在JS中调用时,使用`window.androidObject.androidMethod();`获取Android传递的数据。示例代码展示了JS和Android运行效果与日志输出。

第二种方法是`shouldOverrideUrlLoading`,允许JS通过重定向触发Android拦截,解析URL中的数据,并指挥Android执行相应操作。简单的重定向代码和URL编码示例展示了如何将数据传递给Android。打印结果验证了数据解析和执行情况。

第三种方法是通过`loadUrl`实现Android调用JS。示例代码展示了如何将数据`jsonParams`传递给JS并显示在H5页面上。通过修改JS代码中的注释,演示了请求重定向的问题,随后介绍了一种方法来弥补这一缺陷。

第四种方法是`evaluateJavascript`,允许Android调用JS代码,实现数据双向传递。示例代码与运行结果展示了其功能,通过日志输出验证了数据的交互过程。

JSBridge原理简述为:它是一座由JavaScript构建的桥梁,替代WebView自带的接口,提供灵活、安全的Android与JS交互机制。它允许根据预约定的规则通知Native执行特定操作,实现两者的交互。

若有编程疑问,欢迎私信我,我会尽快解答。我是编程小石头,一名全栈开发者,分享编程经验与心得,希望帮助后来者少走弯路。关注我,获取更多干货分享。

4. 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

5. android 开发中 怎么用js获取手机屏幕高度

webview.addjavascriptinterface可以调用android代码
android可以获得屏幕高度
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int height = dm.heightPixels//这个就是屏幕高度了。

webView.addJavascriptInterface(new WebAppInterface(this), "Android");
这个就创立了一个接口名,叫“Android”,运行在WebView中的JS代码可以通过这个名字调用WebAppInterface类中的showToast()方法:
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast)
{
Android.showToast(toast);
}
</script>

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

在android中调用本地js文件里的方法并得到返回值其方法如下:

Android中内置了WebKit模块,而该模块的Java层视图类就是WebView,所有需要使用Web浏览器功能的Android都需要创建该视图类对象显示和处理请求的网络资源。目前WebKit支持Http、Https、Ftp和JavaScript请求。下面是在Android中调用JavaScript方法以及如何在js中调用本地方法。

1、在Assets下放一个简单的html文件jstest.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd">
<HTML>
<HEAD>
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" />
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function showMsg(){
alert("hello world!");
}
function showMsgInAndroid(){
myjs.showMsg('hello in android!');
}
</script>
</HEAD>
<BODY>
<span>测试js使用</span>

<button id='btntest' onclick='showMsgInAndroid()'>调用android方法</button>
</BODY>
</HTML>
2、布局文件main.xml

<?xml version="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
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"/>

热点内容
编译器输出地址 发布:2025-05-03 05:56:10 浏览:484
手机软件图片存储 发布:2025-05-03 05:50:25 浏览:862
nginxip访问网站 发布:2025-05-03 05:47:32 浏览:720
太阳数据库 发布:2025-05-03 05:39:51 浏览:137
qq空间java 发布:2025-05-03 05:39:44 浏览:413
设计师导航源码 发布:2025-05-03 05:35:23 浏览:958
c语言程序案例 发布:2025-05-03 05:34:43 浏览:604
开播脚本 发布:2025-05-03 04:56:56 浏览:819
python按位翻转 发布:2025-05-03 04:55:35 浏览:260
电视加密码是什么 发布:2025-05-03 04:54:04 浏览:855