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感性趣的友友们一起探讨和打赏!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容