android 从 phonegap 到 js webview 交互
像生活类、办公协同类。
动态添加,下载等。

1、phonegap 我这里用了旧的版本,可能新版本变化大了。
创建asset资源文件夹,然后新建index.html
copy 相应的js 文件进来。

创建继承于 DroidGap的activity。
import android.os.Bundle;
import org.apache.cordova.DroidGap; /**
* Created by Zico_Chan on 2016/11/23.
*/
public class HybirdActivity extends DroidGap { /**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setIntegerProperty("splashscreen", R.drawable.welcome);
//html文件加载慢,设置超时时间
super.setIntegerProperty("loadUrlTimeoutValue", 120000);
super.loadUrl("file:///android_asset/www/index.html");
}
}
如果我首页html要弄一个拍照功能的:
head标签添加:
<script type="text/javascript" src="http://tm.arcgisonline.cn:8038/arcgis_js_v27/library/2.7/jsapicompact/"></script>
<link href="jquery-mobile/jquery.mobile-1.0.1.min.css" rel="stylesheet" type="text/css"/>
<script src="jquery-mobile/jquery-1.6.4.js" type="text/javascript"></script>
<script src="jquery-mobile/jquery.mobile-1.0.1.min.js" type="text/javascript"></script>
<script type="text/javascript" src="js/index.js"></script>
<script src="js/cordova-1.5.0.js" type="text/javascript"></script>
点击照相,启动手机照相机,拍照后,显示拍照的照片到id为myPhoto的img标签上。
function getPhoto(){
if(!navigator.camera) {
alert("camera can not use");
return;
}
navigator.camera.getPicture(onSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI });
function onSuccess(imageData) {
//alert("camer successful!!!");
//alert(imageData);
var newnote=$("#newNote");
var src=imageData;
//var src="data:image/jpeg;base64," + imageData;
var img=$("#myPhoto");
img.attr("src",src);
img.css("display","block");
//var img="<img src="+src+"/>";
//newnote.append(img);
newnote.listview("refresh");
}
function onFail(message) {
alert(' carema Failed because: ' + message);
}
}
2、使用js webview 交互:

看phonegap 插件 源码知道:
这边也是通过startActivity 去启动获取图片的。
所以我们也可以简单做个回调,来实现简单的交互。
在初始化webview的方法上,添加注解:
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
getpPhoto类中接口OnGetPhotoListener,作为简单的回调。
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_js);
mWebView = (WebView) findViewById(R.id.webview_js);
//设置编码
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
mWebView.getSettings().setJavaScriptEnabled(true);
//设置背景颜色 透明
mWebView.setBackgroundColor(Color.argb(0, 0, 0, 0));
//设置本地调用对象及其接口
getPhoto mPhoto = new getPhoto(this);
mPhoto.setOnGetPhotoListener(new getPhoto.OnGetPhotoListener() {
@Override
public void onGetPhoto(final String imgPath) {
// 调用js中方法
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:initFrame('" + imgPath + "')");
}
});
}
@Override
public void showContancts(final String json) {
// 调用JS中的方法
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript:show('" + json + "')");
}
});
}
});
mWebView.addJavascriptInterface(mPhoto, "photo");
//载入js
mWebView.loadUrl("file:///android_asset/jsindex.html");
}
添加js webview 的本地 调用对象:
注:在html调用的方法上,添加注解:
@android.webkit.JavascriptInterface
具体方法逻辑以及回调:
public class getPhoto {
Context mContxt;
public getPhoto(Context mContxt) {
this.mContxt = mContxt;
}
@android.webkit.JavascriptInterface
public void getPhotoByJs() {
Toast.makeText(mContxt, "getPhotoByJs", Toast.LENGTH_LONG).show();
if(mOnGetPhotoListener != null) {
mOnGetPhotoListener.onGetPhoto("file:///android_asset/icon.png");
}
}
//JavaScript调用此方法拨打电话
@android.webkit.JavascriptInterface
public void call(String phone) {
Toast.makeText(mContxt, phone, Toast.LENGTH_LONG).show();
// startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone)));
}
//Html调用此方法传递数据
@android.webkit.JavascriptInterface
public void showcontacts() {
String json = "[{\"name\":\"zxx\", \"amount\":\"9999999\", \"phone\":\"18600012345\"}]";
Toast.makeText(mContxt, "showcontacts", Toast.LENGTH_LONG).show();
if(mOnGetPhotoListener != null) {
mOnGetPhotoListener.showContancts(json);
}
}
private OnGetPhotoListener mOnGetPhotoListener;
public void setOnGetPhotoListener(OnGetPhotoListener _OnGetPhotoListener){
mOnGetPhotoListener = _OnGetPhotoListener;
}
interface OnGetPhotoListener{
void onGetPhoto(String imgPath);
void showContancts(String json);
}
}
html 中 添加 a标签,作为照相按钮。
<a href='javascript:photo.getPhotoByJs()'>照片</a>
然后这样就走通了,js 跟 webview 交互了。
android 从 phonegap 到 js webview 交互的更多相关文章
- webview与JS的交互
webview与JS的交互 一:hybird app, web app 和 native app 的区别 Web App Hybird App 混合Native App 开发成本 低 中 高 维护 ...
- Android与H5交互(java与js的交互)
一.理论概述 1.js调用java方法 直接调用WebView的该方法就可以添加接口了,不过先要启动交互 // 启用javascript mWebView.getSettings().setJavaS ...
- Android 利用WebViewJavascriptBridge 实现js和java的交互(一)
此文出自:http://blog.csdn.net/sk719887916/article/details/47189607,skay 按安卓开发目前现状来说,开发者大部分时间还是花在UI的屏幕适配上 ...
- android与js的交互之jsbridge使用
众所周知,app的一些功能可能会使用到H5开发,这就难免会遇到java与js 的相互调用,android 利用WebViewJavascriptBridge 实现js和java的交互,这里介绍下JsB ...
- 在UAP中如何通过WebView控件进行C#与JS的交互
最近由于项目需求,需要利用C#在UWP中与JS进行交互,由于还没有什么实战经验,所有就现在网上百度了一下,但是百度的结果显示大部分都是在Android和IOS上面的方法,UWP中的几乎没有.还好微软又 ...
- Android:你要的WebView与 JS 交互方式 都在这里了
前言 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 上述功能是由Android的WebView实现的,其中涉及到Android客户端与 ...
- Android与JS进行交互传文件路径
webview+h5这种混合开发最近很火,其中最重要的大概就是java代码和js的交互了,刚接触这东西两天,写写收获. 新建一个assets文件夹,要与res这个文件夹同级,其中存放web项目. 先看 ...
- (转载)JS与WebView交互存在的一些问题
JS与WebView交互存在的一些问题 作者 隔壁的李小宝 关注 2015.06.09 19:30 字数 2896 阅读 11117评论 3喜欢 35 一.背景概述 2013年Android平台暴露出 ...
- android code 和js的交互
小弟现在需要android code 和js的交互.出现了问题,求大家带一带啊. 我的页面:<!DOCTYPE html><html lang="en">& ...
随机推荐
- markdown编辑器sublime text3
安装包管理Package Control ctrl+`或者点击查看-->显示面板,复制下面的代码到面板里. import urllib.request,os; pf = 'Package Con ...
- c#获取外网IP地址的方法
1.如果你是通过路由上网的,可以通过访问ip138之类的地址来获取外网IP 2.如果是通过PPPOE拨号上网的,可以使用以下代码获取IP //获取宽带连接(PPPOE拨号)的IP地址,timeout超 ...
- linux 文件系统
/ 根目录 /bin 存放着启动时所需要的普通程序.很多程序在启动以后也很有用,它们放在这个目录下是因为它们经常要被其他程序调用 /boot 很多Linux系统把内核映像和其他一些和启动有关的文件都放 ...
- 让一个图片在div中居中(四种方法)
第一种方法: <div class="title"> <div class="flag"></div> <div cl ...
- Eclipse下载与安装
有很多小伙伴不知道eclipse在哪里下载以及怎么安装的,那我来给大家做个演示吧. 学习java比较常用的软件就是eclipse,而eclipse安装后并不能马上使用,还需要安装jdk并搭建环境.下面 ...
- sh4.case语句
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构.case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...
- springMVC中 request请求数据绑定到Controller入参 过程剖析
前言:Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数.众 ...
- 60阶单群同构于A5的证明
设$G$是$60$阶的单群,我们来证明他同构于$A_5$,一个比较直观地思路是考虑群表示$\phi:G\to S(\Sigma)$,由同态基本定理得到$$G/{\rm Ker}\phi \simeq ...
- PHP7函数大全(4553个函数)
转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcsla ...
- ExtJS基础知识总结:常用控件使用方式(一)
概述 最近一直在做相关ExtJs方面的项目,遇到了ExtJs使用方面的一系列问题,现在将使用技巧做个记录汇总,以便于下次能够快速使用.以下都是ExtJs控件的常用方法,做简单汇总,俗话说,好记星不如烂 ...