Android和html5的js交互
2016-05-30 10:38
323 查看
最近比较流行android和html5混合开发,那么彼此间的交互效果是少不了的,就是最基本的h5嵌套有的时候也需要彼此控制,那么该怎么实现呢?接下来看代码......
H5:
/*
function ValueFromAndroid(obj){
document.getElementById("web").innerHTML=obj;
}
function shareAnIos(){ //用于标识 比如登陆传login 我就调用android微信登陆 传wxapy
我就掉微信支付 var lei = "login"; try{ myObj.ValueFromJS(lei); //调用安卓 方法 }catch(error){ console.log(error) }finally{ }}*/
Android:
private static boolean isExit = false;
/**
* WebView就是一个简单的浏览器,android浏览器源码存在于LINUX/android/package/apps/Browser中
* 里面的所有操作都是围绕WebView来展开的
*/
WebSettings settings = wv_hry.getSettings();
// 设置编码
settings.setDefaultTextEncodingName("utf-8");
// 是否支持支持js
settings.setJavaScriptEnabled(true);
// 是否支持保存密码
settings.setSavePassword(false);
// 是否支持保存数据
settings.setSaveFormData(false);
// 是否支持访问文件数据
settings.setAllowFileAccess(true);
settings.setDomStorageEnabled(true);
// 调整到原webview的大小
settings.setUseWideViewPort(true);
// 支持自动加载图片
settings.setLoadsImagesAutomatically(true);
// 是否支持缩放
settings.setSupportZoom(false);
// 设置背景颜色 透明
wv_hry.setBackgroundColor(Color.argb(0, 0, 0, 0));
// 设置本地调用对象及其接口
wv_hry.addJavascriptInterface(new JavaScriptObject(mContext),
"myObj");
// 载入js,对应当前project的asserts目录
// 也可以写file:///sdcard/index.html
wv_hry.loadUrl("http://139.224.56.54/hry/index.php");
wv_hry.setWebViewClient(new SimonWebViewClient());
//处理h5弹框
wv_hry.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});
//非点击时获取数据和传送数据
wv_hry.post(new Runnable() {
@Override
public void run() {
String url =
wv_show.getUrl();
String title =
wv_show.getTitle();
}
});
}
/**
* 给js传递数据
* @param view
*/
public void clickButton(View view) {
wv_hry.loadUrl("javascript:ValueFromAndroid('" +
"simon" +
"')");
}
/**
* 获取js数据
* @author Simon
*/
class JavaScriptObject {
Context mContxt;
public JavaScriptObject(Context mContxt) {
this.mContxt = mContxt;
}
/**
* 返回的字符串数量不限
* @param value1
*/
@JavascriptInterface
public void ValueFromJS(String value1, String value2) {
Log.i("Simon",
"-------------------" +
"value1 = " + value1
+ " value2 = " + value2);
}
}
class SimonWebViewClient
extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
/**
* 双击退出
*/
@Override
public boolean onKeyDown(int keyCode,
KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
String currentUrl = wv_hry.getUrl();
String firstUrl = "http://139.224.56.54/hry/index.php";
String secondeUrl = "http://139.224.56.54/hry/index.php/earnings";
String thirdUrl = "http://139.224.56.54/hry/index.php/service";
String fourthUrl = "http://139.224.56.54/hry/index.php/mine";
if (currentUrl.equals(firstUrl) || currentUrl.equals(secondeUrl)
|| currentUrl.equals(thirdUrl)
|| currentUrl.equals(fourthUrl)) {
exit();//
这里也可以弹出对话框
} else {
wv_hry.canGoBack();
wv_hry.goBack();
}
}
return false;
}
private void exit() {
if (!isExit) {
isExit =
true;
Toast.makeText(this,
"在按一次退出程序", Toast.LENGTH_SHORT).show();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
isExit =
false;
}
}, 2000);
} else {
finish();
}
}
DEMO:点击打开链接
H5:
/*
function ValueFromAndroid(obj){
document.getElementById("web").innerHTML=obj;
}
function shareAnIos(){ //用于标识 比如登陆传login 我就调用android微信登陆 传wxapy
我就掉微信支付 var lei = "login"; try{ myObj.ValueFromJS(lei); //调用安卓 方法 }catch(error){ console.log(error) }finally{ }}*/
Android:
private static boolean isExit = false;
/**
* WebView就是一个简单的浏览器,android浏览器源码存在于LINUX/android/package/apps/Browser中
* 里面的所有操作都是围绕WebView来展开的
*/
WebSettings settings = wv_hry.getSettings();
// 设置编码
settings.setDefaultTextEncodingName("utf-8");
// 是否支持支持js
settings.setJavaScriptEnabled(true);
// 是否支持保存密码
settings.setSavePassword(false);
// 是否支持保存数据
settings.setSaveFormData(false);
// 是否支持访问文件数据
settings.setAllowFileAccess(true);
settings.setDomStorageEnabled(true);
// 调整到原webview的大小
settings.setUseWideViewPort(true);
// 支持自动加载图片
settings.setLoadsImagesAutomatically(true);
// 是否支持缩放
settings.setSupportZoom(false);
// 设置背景颜色 透明
wv_hry.setBackgroundColor(Color.argb(0, 0, 0, 0));
// 设置本地调用对象及其接口
wv_hry.addJavascriptInterface(new JavaScriptObject(mContext),
"myObj");
// 载入js,对应当前project的asserts目录
// 也可以写file:///sdcard/index.html
wv_hry.loadUrl("http://139.224.56.54/hry/index.php");
wv_hry.setWebViewClient(new SimonWebViewClient());
//处理h5弹框
wv_hry.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});
//非点击时获取数据和传送数据
wv_hry.post(new Runnable() {
@Override
public void run() {
String url =
wv_show.getUrl();
String title =
wv_show.getTitle();
}
});
}
/**
* 给js传递数据
* @param view
*/
public void clickButton(View view) {
wv_hry.loadUrl("javascript:ValueFromAndroid('" +
"simon" +
"')");
}
/**
* 获取js数据
* @author Simon
*/
class JavaScriptObject {
Context mContxt;
public JavaScriptObject(Context mContxt) {
this.mContxt = mContxt;
}
/**
* 返回的字符串数量不限
* @param value1
*/
@JavascriptInterface
public void ValueFromJS(String value1, String value2) {
Log.i("Simon",
"-------------------" +
"value1 = " + value1
+ " value2 = " + value2);
}
}
class SimonWebViewClient
extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
/**
* 双击退出
*/
@Override
public boolean onKeyDown(int keyCode,
KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
String currentUrl = wv_hry.getUrl();
String firstUrl = "http://139.224.56.54/hry/index.php";
String secondeUrl = "http://139.224.56.54/hry/index.php/earnings";
String thirdUrl = "http://139.224.56.54/hry/index.php/service";
String fourthUrl = "http://139.224.56.54/hry/index.php/mine";
if (currentUrl.equals(firstUrl) || currentUrl.equals(secondeUrl)
|| currentUrl.equals(thirdUrl)
|| currentUrl.equals(fourthUrl)) {
exit();//
这里也可以弹出对话框
} else {
wv_hry.canGoBack();
wv_hry.goBack();
}
}
return false;
}
private void exit() {
if (!isExit) {
isExit =
true;
Toast.makeText(this,
"在按一次退出程序", Toast.LENGTH_SHORT).show();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
isExit =
false;
}
}, 2000);
} else {
finish();
}
}
DEMO:点击打开链接
相关文章推荐
- Android 6.0+ 运行时权限探索
- Android Launcher浅析(二)
- Android-PullToRefresh 使用心得
- Android之AlarmManager
- 记Android Studio自定义属性访问不了的问题
- fragement生命周期
- android Hybird开发,phonegap项目,node grunt 压缩、混淆 angularjs/ionic
- 安卓初识基本控件_Gallery
- android 仿饿了么购物车
- android auto 学习分享
- Android Studio中SVN安装与使用
- android 记事本程序源码
- 内存中加载图片防止oom措施
- android_文本垂直滚动
- Android复制asset目录的文件到SD卡下
- 15 个 Android 通用流行框架大全
- Android之自定义Adapter的ListView
- Android禁用横竖屏切换那些事
- Android基础之四大组件---Service(一)
- android 导入gradle项目The project is using an unsupported version of Gradle.