ionic6探索笔记——原生插件的使用

官方插件文档:https://ionicframework.com/docs/native


前面提到,ionic集成原生的方式有两种:capacitor和cordova,在官方文档里也分别介绍了各自的插件使用方法。今天就分别探索一下这两种集成方式是怎样使用原生插件的。文章以最常用的相机插件为例。

一、Capacitor的相机插件

在使用capacitor插件之前需要在项目里安装一个名为@capacitor/core的工具包:

npm install @capacitor/core --save

如果在创建项目的时候选择集成capacitor,这个工具包应该会自动安装。

使用方法

1、在页面的.ts文件引入资源并实例化对象

import { Camera } from '@capacitor/core';

const {Camera} = Plugins;

async getPhotos() {

  const photos= await Camera.getPhoto({

    resultType: CameraResultType.Uri,

    source: CameraSource.Prompt,

    quality: 100

  });

    this.imgSrc = photos.webPath;

}

注意,这里定义方法需要用async声明,并且Camera.getPhoto()方法前面要加await,这是为了处理异步操作。

详细的参数说明我们可以进入源文件中查询,这里简单介绍一下常用的两个参数:

resultType(返回的结果类型)

这个参数是必填的,有三种类型:CameraResultType.Uri(图片的web地址)、CameraResultType.Base64(base64字符串)、CameraResultType.dataUrl(加上’data:image/png;base64,’的base64字符串)。这三种返回结果类型对应的字段分别是:webPath、base64String、dataUrl

source(资源类型)

CameraSource.Prompt(选择弹窗)、CameraSource.Camera(直接打开相机)、CameraSource.Photos(直接打开相册)

效果展示(source = CameraSource.Prompt)

1、在浏览器中

在浏览器中

测试结果:直接打开本地资源

2、在安卓手机


安卓手机

测试结果:弹出操作表,可以选择相册或者拍照

3、在苹果手机上


苹果手机

效果和安卓类似

写到这里,我突然产生一个想法,在手机上访问ionic的web服务能不能使用capacitor的插件。

首先,我们先指定IP启动服务:

ionic server --host 你的IP地址(默认localhost) --port 你的端口(默认8100)

服务起来之后,我们在手机浏览器上访问该IP(如:192.168.13.68:8100),手机必须和服务在同一网段,接下来就是调用插件的方法了

1、在安卓手机上

2、在苹果手机上


显然,在手机web网页也是可以借助capacitor调用手机硬件,这是cordova的插件无法做到的。

另外两种获取图片的方式(CameraSource.Camera(直接打开相机)、CameraSource.Photos(直接打开相册))就不介绍了,大家可以自己试一下。



二、cordova的相机插件

1、禁用capacitor

ionic integrations disable capacitor

2、添加平台

ionic cordova platform add android/ios

3、安装插件

ionic cordova plugin add cordova-plugin-camera

npm install @ionic-native/camera

4、使用插件

首先在app.module.ts全局引入服务

在ts文件中的部分代码

import {Camera} from '@ionic-native/camera/ngx';

constructor( private camera: Camera) {}

getPhotos() {

  this.camera.getPicture({

    sourceType: 1  // PHOTOLIBRARY : 0, CAMERA : 1, SAVEDPHOTOALBUM : 2

  });

}

不过在打包的过程中报错了:


应该是Camera服务需要依赖 @ionic-native/core这个服务

那就安装一下咯

npm install @ionic-native/core

5、效果展示

在浏览器中无法使用:

但是在手机上是可以打开相机的          


对比两种集成方式调用相机的方法,我们发现使用capacitor只需要安装和引用@capacitor/core这个服务就可以使用它提供的所有原生api,而集成cordova则需要安装用到的所有模块和cordova插件。显然,在集成capacitor而不安装cordova插件的情况下,是不能使用cordova的插件来调用手机硬件,但是我们在集成cordova并安装@capacitor/core之后可不可以使用capacitor调用手机硬件呢?

1、安装和引用@capacitor/core 上面已经介绍了,这里不做过多说明

import { Camera } from '@capacitor/core';

const {Camera} = Plugins;

2、调用相机

async getPhotos() {

  const photos= await Camera.getPhoto({

    resultType: CameraResultType.Uri,

    source: CameraSource.Prompt,

    quality: 100

  });

    this.imgSrc = photos.webPath;

}

结果展示

苹果手机



安卓手机

结论:在苹果手机上,使用CameraSource.Camera可以直接打开相机,使用另外两种方式都如图所示;而在安卓手机上,三种方式都是进入手机相册。这跟单独集成capacitor还是有区别的。


总结:

    ionic6之前的版本,调用原生只有集成cordova一种方式。ionic6开始,又多了capacitor这种方式(capacitor应该算是cordova的升级版)。在使用方式上来看,capacitor更加方便,只需要安装一个服务模块就可以调用它提供的所有api。但是capacitor也有一个弊端,那就是它目前提供的api相对较少,基本都是些常用的功能,而cordova相对丰富一些。

    那么在我们的实际开发当中,还是建议优先集成cordova,这样既能使用capacitor提供的原生功能,也可以使用cordova的插件。

    本文只是对调用相机做了两种集成方式的比较,对于其他插件大家可以在用到的时候自行比较。


欢迎对ionic6感性趣的友友们一起探讨和打赏!

你可能感兴趣的:(ionic6探索笔记——原生插件的使用)