Android—android与js交互以及相互传参
Android中可以通过WebView来实现与js的交互,让用户可以在android客户端看到js写的页面,接下来为大家介绍的就是怎样实现此功能:
首先android项目目录下有“assets”文件夹,开发者需要将html文件拷贝到此文件夹下。
html代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0032)http://localhost:8080/jsandroid/ -->
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-store,no-cache">
<meta name="Handheldfriendly" content="true">
<meta name="viewport" content="width=100%; initial-scale=1.0; user-scalable=yes">
<meta name="robots" content="all">
<meta name="keywords" contect="doodle, mobile, doodlemobile, game, games">
<meta name="description" content="Make People's Mobile Life More Connected Through Games.">
<title>jsandroid_test</title>
<script type="text/javascript" language="javascript">
//此方法是调用了android的方法HtmlcallJava2();
function showHtmlcallJava2(){
var str = document.getElementById("id_input").value
var str1 = document.getElementById("id_input2").value
//调用android中的方法
window.jsObj.HtmlcallJava2(str+","+str1);
} </script> </head> <body> hello IT-homer <br>
<br>
<br>
<br> <input id="id_input" style="width: 90%" type="text" value="null" />
<br>
<br> <input id="id_input2" style="width: 90%" type="text" value="null" />
<br>
</body> </html>
xml布局文件,很简单:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".JSAndroidActivity" > <WebView
android:id="@+id/mWebView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="clickView"
android:text="获取" /> </LinearLayout>
mainActivity中的核心代码是:
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(jsInterface, "jsObj");
mWebView.loadUrl("file:///android_asset/index.html");
请理解核心代码的详细注释 mainActivity代码:
package com.homer.jsandroid; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer; import android.R.anim;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.TextView;
import android.widget.Toast; public class JSAndroidActivity extends Activity {
private Activity mActivity = null;
private WebView mWebView = null;
private String message;
private JsInterface jsInterface;
private String[] params = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = this;
// 锁定横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);
params = new String[2];
jsInterface = new JsInterface();
showWebView();
} @SuppressLint("SetJavaScriptEnabled")
private void showWebView() {
try {
mWebView = (WebView) findViewById(R.id.mWebView); mWebView.requestFocus(); mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int progress) {
JSAndroidActivity.this.setTitle("Loading...");
JSAndroidActivity.this.setProgress(progress);
if (progress >= 80) {
JSAndroidActivity.this.setTitle("JsAndroid Test");
}
}
}); mWebView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return false;
}
});
// WebView的管理设置状态
WebSettings webSettings = mWebView.getSettings();
// 设置android下容许执行js的脚本
webSettings.setJavaScriptEnabled(true);
// 编码方式
webSettings.setDefaultTextEncodingName("utf-8");
/*
* 使用这个函数将一个对象绑定到Javascript,因此可以从Javascript访问的方法,
* Android(Java)与js(HTML)交互的接口函数, jsObj 为桥连对象可随意设值
*/
mWebView.addJavascriptInterface(jsInterface, "jsObj");
/*
* Android(Java)访问js(HTML)端代码是通过loadUrl函数实现的,访问格式如:
* mWebView.loadUrl("javascript: showFromHtml()");
*/
mWebView.loadUrl("file:///android_asset/index.html");
} catch (Exception e) {
e.printStackTrace();
}
} private class JsInterface {
/**
* js中通过window.jsObj.HtmlcallJava2("参数") 可以调用此方法并且把js中input中的值作为参数传入,
* 但这是在点击js中的按钮得到的,若实现点击java中的按钮得到,需要方法 clickView(View v)
*
* @param param
*/
public void HtmlcallJava2(final String param) {
message = param;
String str = message;
StringTokenizer st = new StringTokenizer(str, ",;");
while (st.hasMoreTokens()) {
for (int i = 0; i < params.length; i++) {
params[i] = st.nextToken();
System.out.println(params[i]);
}
}
Toast.makeText(JSAndroidActivity.this, param, Toast.LENGTH_SHORT)
.show();
}
} /**
* button的点击事件
*
* @param v
*/
public void clickView(View v) {
runOnUiThread(new Runnable() {
@Override
public void run() {
/**
* 调用js中的方法实现点击java中的按钮得到js中input的值
*/
mWebView.loadUrl("javascript: showHtmlcallJava2()");
}
});
}
}
希望给大家带来帮助,谢谢!
Android—android与js交互以及相互传参的更多相关文章
- Android与JS交互,json传参问题
一.JS调用Android的方法 JS调用安卓的方法,并且传递的参数为json格式的字符串(JSONObject.toString()), 例如: var json = {"name&quo ...
- JS XMLHttpRequest.upload.addEventListener 传参,回调
JS 回调函数,传参的办法. function uploadFile(t) { var fd = new FormData(); fd.append("_netLogo", doc ...
- Android与js交互拍照上传资料
应用场景:h5通知android端拍照,选相册,然后将图片路径上传成功之后,获取到网络路径,将此路径返还给h5界面,并展示出来. android与js快速交互 效果图如下: 1.在Activity ...
- java与js交互,相互调用传参
随着前端技术的发展与H5的广泛使用,移动端采用native+h5的方式越来越多了,对于Android来说就涉及到java与js的交互,相互调用传参等.下面就来看一下java与js交互的简单demo. ...
- [android] WebView与Js交互
获取WebView对象 调用WebView对象的getSettings()方法,获取WebSettings对象 调用WebSettings对象的setJavaScriptEnabled()方法,设置j ...
- vue 父子组件相互传参
转自https://blog.csdn.net/u011175079/article/details/79161029 子组件: <template> <div> <di ...
- js 调用接口并传参
注:需先引入 jquery.json-xx.min.js 1. 参数跟在url后面 var name = '王一'; var age = 18; $.ajax({ type : 'get', url ...
- flash与php 交互(as传参给php)
一种 不传参 直接读取PHP文件 btn.addEventListener(MouseEvent.CLICK,loadTxt);function loadTxt(evt:MouseEvent):voi ...
- js加减运算·传参
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
随机推荐
- Android之线程池深度剖析
1.线程池的引入 引入的好处: 1)提升性能.创建和消耗对象费时费CPU资源 2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多. 使用条件: 假设在一台服务器完成一 ...
- MVC4做网站六后台管理:6.2网站信息设置
用来实现网站标题.名称.关键字.描述.版权等信息的设置. 模型字段: 网站的设置信息前后台都要用到,所以要把模型方式Ninesky/Models文件夹中,代码如下: ///////////////// ...
- google浏览器截图工具 Open Screenshot(代码截图)
有的时候特别想把自己写的代码保存为图片,但是代码的内容很长,用普通的截图工具只能一次一次的拼接起来,太麻烦了.这里使用了Google的截图插件,很好用. 或者使用360极速浏览器-->保存网页也 ...
- VXLAN 概念(Part I) - 每天5分钟玩转 OpenStack(108)
除了前面讨论的 local, flat, vlan 这几类网络,OpenStack 还支持 vxlan 和 gre 这两种 overlay network. overlay network 是指建立在 ...
- BFC之浅析篇
BFC是什么呢? 掏粪男孩? 当然不是咯.BFC,英文名Block formatting context,直译为“块级格式化上下文”.它是W3C CSS 2.1规范中的一个概念,决定了元素如何对内容进 ...
- 生成Kindle可读的mobi和PDF电子书
购买kindle之后,自然欣喜万分,不来自于工具本身,而来自于发现自己能够静下心来阅读长篇和复杂的文字了,可喜可贺.更重要的是,kindle减轻了我眼睛的莫大的压力.但马上就出现几个问题: 不是所有的 ...
- IOS开发之绝对布局和相对布局(屏幕适配)
之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便.在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处.下 ...
- 1Z0-053 争议题目解析687
1Z0-053 争议题目解析687 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 687.Users are connected to a database instance th ...
- Node.js、Express框架获取客户端IP地址
Node.js //传入请求HttpRequest function getClientIp(req) { return req.headers['x-forwarded-for'] || req.c ...
- SQL Server利用递归把所有【子部门员工】汇总到【一级根节点部门】
前言 说起这个需求,有点反常规,左边是组织机构树,右边是组织机构对应的员工列表.点击左侧组织机构时传一个组织机构ID,然后查询该组织机构以及其所属的一级节点,如果有部门直属单击节点组织机构,则挂出来员 ...