android 原生与h5交互
来源:互联网 发布:腾讯云阿里云哪个好 编辑:程序博客网 时间:2024/05/22 02:03
一、首先是网页端,这个就是一些简单的标签语言和JS函数:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>H5 And Android</title>
<script>
//定义本地方法 效果提供给Android端调用 被调用后将获得参数值
function callH5(data){
document.getElementById("result").innerHTML="result success for Android to:"+data;
}
//定义本地点击事件 效果调用Android方法 传递参数给Android客服端
function myOnclick(){
document.getElementById("result").innerHTML="按钮被点击了"
//调用android本地方法 调用对象由Android定义实例化,调用方法由Android提供 (具体对象名和方法待定,可变更)
myObj.callAndroid("弹窗显示回调成功了~~~");
}
js调用android
WebSettings webSettings = webView.getSettings();// 设置WebView属性,能够执行Javascript脚本webSettings.setJavaScriptEnabled(true);// 设置可以访问文件webSettings.setAllowFileAccess(true);// 设置支持缩放webSettings.setBuiltInZoomControls(true);webView.addJavascriptInterface(new JavaScriptInterfaces(), "control");// 加载需要显示的网页webView.loadUrl(url + "?newsId=" + newsId + "&newsType=" + newsType + "&subjectImg=" + imageUrl);String str = url + "?newsId=" + newsId + "&newsType=" + newsType + "&subjectImg=" + imageUrl;LogUtils.e(url + "?newsId=" + newsId + "&newsType=" + newsType + "&subjectImg=" + imageUrl);// 设置Web视图webView.setWebViewClient(new webViewClient());// 如果去掉webView会用浏览器加载网络连接
class JavaScriptInterfaces { JavaScriptInterfaces() { } @JavascriptInterface public void toNews(long newsId, String accessUrl) { Intent intent = new Intent(SpecialWebActivity.this, NewsDetailsWebActivity.class); intent.putExtra("newsId", newsId + ""); startActivity(intent); }}
</script>
</head>
<body>
<button id="button" onclick="myOnclick()">点击调用Android方法</button>
<p/>
<div id="result">效果展示</div>
</body>
</html>
二、接下来就是Android中加载web网页,并且设置完成交互了,直接上代码,也有详细注释:
package com.lvyerose.h5andandroid;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mWebView = (WebView) findViewById(R.id.webView);
initWeb();
}
@SuppressLint({"JavascriptInterface", "SetJavaScriptEnabled"})
void initWeb(){
//设置编码
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
mWebView.getSettings().setJavaScriptEnabled(true);
//设置本地调用对象及其接口
//第一个参数为实例化自定义的接口对象 第二个参数为提供给JS端调用使用的对象名
mWebView.addJavascriptInterface(new Contact() {
@JavascriptInterface //必须加的注解
@Override
public void callAndroid(String phone) {
Toast.makeText(MainActivity.this, phone, Toast.LENGTH_LONG).show();
}
}, "myObj");
//载入js
mWebView.loadUrl("http://lvyerose.com/h5andAndroid.html");
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Android调用Js方法,其中参数 'Android OK !!!' 可传入变量 效果如下:
// mWebView.loadUrl("javascript:callH5('"+str+"')");
mWebView.loadUrl("javascript:callH5('Android OK !!!')");
}
});
}
//定义接口,提供给JS调用
interface Contact {
@JavascriptInterface
void callAndroid(String phone);
}
}
- android 原生与h5交互
- H5与android原生的JS交互
- h5页面与Android原生页面交互
- Android原生与H5交互的实现
- H5页面与Android原生页面交互
- Android原生与H5交互的实现
- Android原生与H5交互的实现
- h5与原生代码交互
- H5与iOS原生交互
- JavaScriptCore原生与H5交互
- android原生和H5交互
- Android与H5交互
- Android与H5交互
- Android与H5交互
- android与h5交互
- Android与h5交互
- Android 与H5交互
- Android与H5交互
- STL系列之七 快速计算x的n次幂 power()的实现
- ESP8266-01学习笔记01:如何使用USB转串口对ESP-01进行入门调试、烧录固件?
- [Ubuntu Error]鼠标指针闪烁的解决方法
- 电感电容串联起什么作用
- Android各种键盘挡住输入框解决办法
- android 原生与h5交互
- 修改navigationBar
- STL系列之八 slist单链表
- mysql数据库的基本命令 精简实用版
- 欢迎使用CSDN-markdown编辑器
- iOS-UIWebview缓存并保证实时性
- js判断iOS或安卓跳转相应平台【基础常用】
- 51Nod-1572-宝岛地图
- 什么是IO多路复用,理解IO多路复用