JavaScript调用原生API获取手机型号

跨平台技术简介

针对原生开发面临问题,人们一直都在努力寻找好的解决方案,而时至今日,已经有很多跨平台框架,根据其原理,主要分为三类:

  • H5+原生(Cordova、Ionic、微信小程序)
  • JavaScript开发+原生渲染 (React Native、Weex、快应用)
  • 自绘UI+原生(QT for mobile、Flutter)

在接下来的章节中我们逐个来看看这三类框架的原理及优缺点。

Hybrid技术简介

H5+原生混合开发

这类框架主要原理就是将APP的一部分需要动态变动的内容通过H5来实现,通过原生的网页加载控件WebView (Android)或WKWebView(iOS)来加载。这样一来,H5部分是可以随时改变而不用发版,动态化需求能满足;同时,由于h5代码只需要一次开发,就能同时在Android和iOS两个平台运行,这也可以减小开发成本,也就是说,H5部分功能越多,开发成本就越小。我们称这种h5+原生的开发模式为混合开发 ,采用混合模式开发的APP我们称之为混合应用Hybrid APP ,如果一个应用的大多数功能都是H5实现的话,我们称其为Web APP 。

目前混合开发框架的典型代表有:Cordova、Ionic 和微信小程序,值得一提的是微信小程序目前是在webview中渲染的,并非原生渲染,但将来有可能会采用原生渲染。

混合开发技术点

如之前所述,原生开发可以访问平台所有功能,而混合开发中,H5代码是运行在WebView中,而WebView实质上就是一个浏览器内核,其JavaScript依然运行在一个权限受限的沙箱中,所以对于大多数系统能力都没有访问权限,如无法访问文件系统、不能使用蓝牙等。所以,对于H5不能实现的功能,都需要原生去做。而混合框架一般都会在原生代码中预先实现一些访问系统能力的API, 然后暴露给WebView以供JavaScript调用,这样一来,WebView就成为了JavaScript与原生API之间通信的桥梁,主要负责JavaScript与原生之间传递调用消息,而消息的传递必须遵守一个标准的协议,它规定了消息的格式与含义,我们把依赖于WebView的用于在JavaScript与原生之间通信并实现了某种消息传输协议的工具称之为WebView JavaScript Bridge, 简称 JsBridge,它也是混合开发框架的核心。

示例:JavaScript调用原生API获取手机型号

下面我们以Android为例,实现一个获取手机型号的原生API供JavaScript调用。在这个示例中将展示JavaScript调用原生API的流程,读者可以直观的感受一下调用流程。选用在Github上开源的dsBridge作为JsBridge来进行通信。dsBridge是一个支持同步调用的跨平台的JsBridge,此示例中只使用其同步调用功能。

  1. 首先在原生中实现获取手机型号的API getPhoneModel

    class JSAPI {
     @JavascriptInterface
     public Object getPhoneModel(Object msg) {
       return Build.MODEL;
     }
    }
    
  2. 将原生API通过WebView注册到JsBridge中

    import wendu.dsbridge.DWebView
    ...
    //DWebView继承自WebView,由dsBridge提供  
    DWebView dwebView = (DWebView) findViewById(R.id.dwebview);
    //注册原生API到JsBridge
    dwebView.addJavascriptObject(new JsAPI(), null);
    
  3. 在JavaScript中调用原生API

    var dsBridge = require("dsbridge")
    //直接调用原生API `getPhoneModel`
    var model = dsBridge.call("getPhoneModel");
    //打印机型
    console.log(model);
    

上面示例演示了JavaScript调用原生API的过程,同样的,一般来说优秀的JsBridge也支持原生调用JavaScript,dsBridge也是支持的,如果您感兴趣,可以去github dsBridge项目主页查看。

现在,我们回头来看一下,混合应用无非就是在第一步中预先实现一系列API供JavaScript调用,让JavaScript有访问系统的能力,看到这里,我相信你也可以自己实现一个混合开发框架了。

总结

混合应用的优点是动态内容是H5,web技术栈,社区及资源丰富,缺点是性能不好,对于复杂用户界面或动画,WebView不堪重任。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue开发的App可以通过Cordova插件调用手机原生功能。Cordova是一个开源的移动应用程序开发框架,它提供了一组API,允许我们使用JavaScript代码访问手机原生功能,如相机、短信、电话、通讯录等。 下面以调用相机为例,介绍如何在Vue开发的App中使用Cordova插件调用手机原生相机功能: 1. 安装Cordova插件 在终端中运行以下命令: ``` cordova plugin add cordova-plugin-camera ``` 2. 在Vue组件中调用Cordova插件 在Vue组件的方法中调用Cordova插件,代码如下: ```javascript navigator.camera.getPicture(function(imageData) { console.log("Image data: " + imageData); }, function(error) { console.log("Error: " + error); }, { quality: 50, destinationType: Camera.DestinationType.DATA_URL }); ``` 在上面的代码中,我们调用了Cordova插件的`getPicture`方法来打开手机的相机,并获取拍摄的照片。在方法的第一个回调函数中,我们可以获取到拍摄的照片数据,可以将其显示在页面上或上传到服务器。在方法的第二个回调函数中,我们可以处理相机打开失败的情况。在方法的第三个参数中,我们可以指定相机的选项,如照片质量、目标类型等。 3. 编译打包Vue App 在完成上述步骤后,我们需要使用Cordova命令行工具将Vue App编译打包成原生App,并在手机上安装运行。 在终端中运行以下命令: ``` cordova platform add android cordova build android cordova run android ``` 完成以上步骤后,我们就可以在手机上测试调用相机功能了。类似地,我们也可以使用其他Cordova插件调用手机的其他原生功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值