Hybrid App 开发初探:使用 WebView 装载页面

简介:

Hybrid App 是混合模式应用的简称,兼具 Native App 和 Web App 两种模式应用的优势,开发成本低,拥有 Web 技术跨平台特性。目前大家所知道的基于中间件的移动开发框架都是采用的 Hybrid 开发模式,例如国外的 PhoneGap、Titanium、Sencha,还有国内的 AppCan、Rexsee 等等。Hybrid App 开发模式正在被越来越多的公司和开发者所认同,相信将来会成为主流的移动应用开发模式。

  

 

  Hybrid App 融合 Web App 的原理就是嵌入一个WebView组件,可以在这个组件中载入页面,相当于内嵌的浏览器,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import  android.app.Activity;
import  android.os.Bundle;
import  android.webkit.WebSettings;
import  android.webkit.WebView;
 
public  class  AActivity extends  Activity{
     
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         // 创建WebView
         WebView webView= new  WebView( this );
         // 切换到内容视图
         setContentView(webView);
         // 获取WebView配置
         WebSettings ws = webView.getSettings();
         // 启用JavaScript
         ws.setJavaScriptEnabled( true );
         // 载入assets目录下的一个页面
         webView.loadUrl( "file:///android_asset/www/BoBox/index.html" );
     }
}

  还有另一种引入方式是在布局文件中添加 WebView 组件,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version= "1.0"  encoding= "utf-8" ?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
     android:orientation= "vertical"
     android:layout_width= "fill_parent"
     android:layout_height= "fill_parent" >
     
     <WebView 
         android:layout_width= "fill_parent"
         android:layout_height= "wrap_content"
         android:id= "@+id/webview"
         />
         
</LinearLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import  android.app.Activity;
import  android.os.Bundle;
import  android.webkit.WebSettings;
import  android.webkit.WebView;
 
public  class  BActivity extends  Activity{
 
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.webview);
         // 查找WebView
         WebView webView = (WebView) findViewById(R.id.webview);
         // 获取WebView配置
         WebSettings ws = webView.getSettings();
         // 启用JavaScript
         ws.setJavaScriptEnabled( true );
         // 在载入assets目录下的一个页面
         webView.loadUrl( "file:///android_asset/www/index.html" );
     }
}

  WebView 还有一个非常重要的方法——addJavascriptInterface,可以用来实现 Java 程序和 JavaScript 程序的相互调用,代码如下:

1
2
3
4
5
6
7
8
9
webView.addJavascriptInterface( new  Object(){
     public  void  clickOnAndroid(){
         mHandler.post( new  Runnable(){
             public  void  run(){
                 webView.loadUrl( "javascript:wave()" );
             }
         });
     }
}, "demo" );

  页面代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
<script>
     function  wave() {
         document.getElementById( "id" ).innerHTML = "Hello World!" ;
     }
</script>
</head>
<body>
     <div>
         <a href= "#"  id= "demo"  onclick= "window.demo.clickOnAndroid()" >Click Me</a>
     </div>
</body>
</html>

  这样,当你点击页面上 Click Me 按钮的时候就会调用 Java 代码中的 clickOnAndroid 函数,clickOnAndroid 函数中又调用页面中的 wave 方法。需要注意的是:这个接口在 Android 2.3 版本的模拟器中运行会导致 WebView 崩溃,目前还没有修复。这是一个非常简单的演示 Java 和 JavaScript 相互调用的例子,在实际应用中可以在页面调用的 clickOnAndroid 函数中再调用摄像头、通讯录、通知提醒等设备功能。

分类:  android solve



本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/p/3905468.html如需转载请自行联系原作者

相关文章
|
2月前
|
Dart Android开发
鸿蒙Flutter实战:03-鸿蒙Flutter开发中集成Webview
本文介绍了在OpenHarmony平台上集成WebView的两种方法:一是使用第三方库`flutter_inappwebview`,通过配置pubspec.lock文件实现;二是编写原生ArkTS代码,自定义PlatformView,涉及创建入口能力、注册视图工厂、处理方法调用及页面构建等步骤。
62 0
|
4月前
|
Android开发
【Azure 环境】移动应用 SSO 登录AAD, MSAL的配置为Webview模式时登录页面无法加载
【Azure 环境】移动应用 SSO 登录AAD, MSAL的配置为Webview模式时登录页面无法加载
|
5月前
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
|
4月前
|
前端开发 C# 开发工具
在winform中使用blazor hybrid构建页面
在winform中使用blazor hybrid构建页面
69 0
|
6月前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
6月前
|
JavaScript 前端开发 Android开发
kotlin开发 webview如何在收到JS调用后,native返回数据给到JS
这段内容描述了在Hybrid App开发中,使用Kotlin的Compose构建的Web视图(WebView)如何通过JsBridge实现JavaScript与原生代码的交互
|
6月前
|
安全 网络安全 API
kotlin安卓开发JetPack Compose 如何使用webview 打开网页时给webview注入cookie
在Jetpack Compose中使用WebView需借助AndroidView。要注入Cookie,首先在`build.gradle`添加WebView依赖,如`androidx.webkit:webkit:1.4.0`。接着创建自定义`ComposableWebView`,通过`CookieManager`设置接受第三方Cookie并注入Cookie字符串。最后在Compose界面使用这个自定义组件加载URL。注意Android 9及以上版本可能需要在网络安全配置中允许第三方Cookie。
|
7月前
|
Web App开发 数据采集 移动开发
开发uniapp过程中对app、微信小程序与h5的webview调试
开发uniapp过程中对app、微信小程序与h5的webview调试
1163 1
|
7月前
|
前端开发 Android开发 开发者
【Flutter前端技术开发专栏】Flutter中的混合应用(Hybrid Apps)开发
【4月更文挑战第30天】本文探讨了使用Flutter开发混合应用的方法。混合应用结合Web技术和原生容器,提供快速开发和低成本维护。Flutter,一款现代前端框架,以其插件系统和高性能渲染引擎支持混合应用开发。通过创建Flutter项目、添加平台代码、使用WebView、处理平台间通信以及发布应用,开发者可构建跨平台混合应用。虽然混合应用有性能和用户体验的局限,但Flutter的跨平台兼容性和丰富的插件生态降低了开发成本。开发者应根据项目需求权衡选择。
184 0
【Flutter前端技术开发专栏】Flutter中的混合应用(Hybrid Apps)开发
|
7月前
|
移动开发 前端开发 JavaScript
说一说你对混合开发(Hybrid Development)的了解。
混合开发(Hybrid App)结合Web和Native技术,实现跨平台应用开发,降低工作量和时间。使用JavaScript等Web技术提升开发效率,通过优化提供接近原生体验。混合应用可即时更新,维护灵活,成本效益高。React Native和Flutter等框架支持混合开发,丰富的社区资源加速开发进程。网易云音乐等成功案例证明其可行性。随着技术进步,混合开发前景广阔。
121 1