Android与H5互调(通过实例来了解Hybrid App)

前些日子,Android原生开发将被取缔的吵得火热,JavaScript是能做一个完全的APP,但只使用JavaScript做出来的APP也不会牛逼到哪里去。最好的是混合(Hybrid)开发,在需要的时候使用JavaScript,各有好处。

Hybrid App中原生页面 VS H5页面:http://www.jianshu.com/p/00ff5664e000

原生页面和H5页面的优劣势分析:

原生页面

优势:

(1)运行速度比较快

(2)能使用设备的底层功能,如摄像头、方向传感器、重力传感器、拨号、GPS、语音、短信、蓝牙等

(3)在界面设计、功能模块、操作逻辑等层面相较web更易做到App的便捷性和舒适性,功能更加强大

(4)节省流量

劣势:

(1)不同的操作系统(如Android和iOS)需要独立的进行开发,使用其各自的开发包、开发工具和控件

(2)每次有更新,都需要重新打包一次发布到应用平台上,且每次要向各个应用商店进行提交审核。之后用户需要手动进行点击更新安装(安装成本较高)

(3)开发成本比较高,尤其需要适配各种机型时(如Android应用,需要适配各种Android手机)

H5页面

优势:

(1)由于是运行在浏览器上,所以只需要开发一次便可以在不同的操作系统上显示

(2)迭代版本时,不需要打包便可以发布(实时更新、快速迭代),与云端实现实时数据交互

(3)开发成本相对较低,对浏览器的适配较简单,且发布门槛相对较低

劣势:

(1)每次打开页面,都得重新加载,获取数据...

(2)过于依赖网络,速度无法保证。特别在弱网环境下,不仅耗费流量而且加载缓慢,就算是WiFi情况下也不容乐观

(3)只能使用有限的设备底层功能(无法使用摄像头、方向传感器、重力传感器、拨号、GPS、语音、短信、蓝牙等功能)

(4)仍处于发展阶段,部分功能无法在基于现有技术的浏览器基础上实现,且无法全面的显示最完美的用户体验,只能用现有技术去弥去找最佳解决方案

分析淘宝中的原生页面和H5页面

----------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------

由上图得知,是否有底部tab导航栏也无法区别出H5页面

----------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------

如下图是一个原生与webview混排的界面,红色线框是各控件的绘制边界,中间那一大块布局丰富的界面没有显示出很多边界红色,就是H5实现的。

案例:

JS调用Java,将Java中的Json数据显示在H5界面,点击调起视频播放器

效果图: 

初始化webView: webview = (WebView) findViewById(R.id.webview);

设置WebSettings:

 1        //设置支持javaScript
 2         webSettings = webview.getSettings();
 3         //设置支持javaScript
 4         webSettings.setJavaScriptEnabled(true);
 5         //设置文字大小
 6         webSettings.setTextZoom(100);
 7         //不让从当前网页跳转到系统的浏览器中
 8         webview.setWebViewClient(new WebViewClient() {
 9             //当加载页面完成的时候回调
10             @Override
11             public void onPageFinished(WebView view, String url) {
12                 super.onPageFinished(view, url);
13             }
14         });
1      //添加javaScript接口
2      webview.addJavascriptInterface(new MyJavascriptInterface(), "Android");
3      // body color: #ff0000">showcontacts()"与内部类中的方法相同      // "Android"必须与HTMl中的body color: #ff0000">Android.showcontacts()"相同
4     //可以加载网络的页面,也可以加载应用内置的页面
5      webview.loadUrl("http://192.168.191.1:8080/JsCallJava.html");



 

javaScript接口的内部类设置如下:

 1 class MyJavascriptInterface {
 2         //调起Vedio
 3         @JavascriptInterface //android4.4以后浏览器内核改变了,但webView是使用原来的内核
 4         public void call(String video) {
 5             Intent intent = new Intent();//隐式意图
 6             intent.setDataAndType(Uri.parse(video),"video/*");
 7             startActivity(intent);
 8         }
 9
10         //加载Vedio信息
11         @JavascriptInterface
12         public void showcontacts(){
13             String json = "[{\"name\":\"LikeYou\",\"video\":\"http://192.168.191.1:8080/LikeYou.mp4\"}]";
14             // 调用JS中的方法
15             webview.loadUrl("javascript:show("+"‘"+json+"‘"+")");
16         }
17     }

源码及资源地下载 : http://www.cnblogs.com/wujiancheng/

(若没有效果,请将build.gradle 中的targetSdkVersion改为低于19) 因为android4.4以后浏览器内核改了,而webView还是使用原来的webkit内核

时间: 2024-08-13 21:20:57

Android与H5互调(通过实例来了解Hybrid App)的相关文章

Android与H5互调

前言 微信,微博,微商,QQ空间,大量的软件使用内嵌了H5,这个时候就需要了解Android如何更H5交互的了:有些外包公司,为了节约成本,采用Android内嵌H5模式开发,便于在IOS上直接复用页面,最终解决成本. 为什么学android也要学h5? Android很多软件都有内嵌H5的,有什么用处.优势?节约成本,提高开发效率. 实现的原理是什么? 本质是:Java代码和JavaScript调用 案例一:Java与Js简单互调 首先,在Android代码中加载H5页面: private v

android 和h5互调步骤

1. Android 中调用JS 假如:H5页面中有一段如下JS代码 function h5Test(str){ xxxx... xxxx... } Android中调用方式如下: 步骤一: 启动支持JS WebSettings ws = getSettings(); ws.setJavaScriptEnable(True); 步骤二: 加载网页 webView.loadUrl(url); 步骤三:调用网页中的js, 注意此处函数名要和 上面js代码中函数名完全一致 webView.loadUr

原生Android结合H5混合开发小结

混合开发概述 微信,微博以及现在市面上大量的软件使用内嵌了H5页面:有些外包公司,为了节约成本,采用Android内嵌H5模式开发,便于在IOS上直接复用页面, 从而提高开发效率. 实现的原理: 本质是:Java代码和Javascript调用 H5页面,只是Html的扩展,Javascript用来处理页面的逻辑 Android和H5互调案例: 一.java调用js WebView的基本设置: private void initWebView() { webView = new WebView(t

优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybrid App源码

目录 一.Recorder H5录音库的特性 (1)浏览器支持 (2)功能支持 二.使用预览截图 (1)移动端H5 (2)IOS Hybrid App (3)Android Hybrid App 三.应用场景 四.优化过程记录 (1)为什么要升级优化 (2)开始使用Web Worker加速转码 (3)剩下的问题 五.Hybrid App存在的意义 六.更多支持 Recorder H5 GitHub开源库随着支持功能的增多,音频转码处理效率渐渐的跟不上需求了,近期抽时间对音频转码部分进行了升级优化

Lua学习 2) —— Android与Lua互调

2014-07-09 一.Android类调用lua并回调 Android调用Lua函数,同时把类作为参数传递过去,然后再Lua中回调类的函数 调用lua mLuaState = LuaStateFactory.newLuaState(); mLuaState.openLibs(); mLuaState.LdoString(KKLua.loadAssetsString(mContext, "lua/swallow.lua"));//将lua转换为字符串 mLuaState.getFie

Android HttpGet() 请求简单入门实例

HttpClient httpclient = new DefaultHttpClient(); String url = "http://example.com"; List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add( new BasicNameValuePair( "param", "value" ) ); URI uri =

Android驱动开发之Hello实例

Android驱动开发之Hello实例: 驱动部分 modified:   kernel/arch/arm/configs/msm8909-1gb_w100_hd720p-perf_defconfig modified:   kernel/arch/arm/configs/msm8909-1gb_w100_hd720p_defconfig modified:   kernel/drivers/input/misc/Kconfig modified:   kernel/drivers/input/

Android系统Google Maps开发实例浅析

Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用.Google Map的服务体现在两个方面:地图API和位置API.使用Android Maps API(地图API)和Android Location API(定位API)可以轻松实现实用而且强大的功能. 我的位置:“我的位置”在地图上显示你的当前位置(通常在 1000 米范围之内).即使没有 GP

【项目实例】android开发游戏音效代码实例

//音效的音量 int streamVolume; //定义SoundPool 对象 private SoundPool soundPool; //定义HASH表 private HashMap<Integer, Integer> soundPoolMap; /*************************************************************** * Function: initSounds(); * Parameters: null * Returns