使用相机拍照
现在进入有趣的部分——使用 Capacitor Camera API 添加使用设备相机拍照的功能。我们将首先为 Web 构建此功能,然后进行一些小的调整以使其在移动设备(iOS 和 Android)上工作。
为此,我们将创建自己的自定义 React hook 来管理相册的照片。
备注
如果您不熟悉 React Hooks,官方 React 文档中的介绍 React Hooks 是一个不错的入门资源。
在 src/hooks/usePhotoGallery.ts 创建一个新文件并打开它。
自定义 hook 只是一个使用其他 React hooks 的函数。这正是我们将要做的!我们将首先从 React 核心库、Ionic React Hooks 项目和 Capacitor 导入我们将使用的各种 hooks 和工具:
import { useState, useEffect } from 'react';
import { isPlatform } from '@ionic/react';
import { Camera, CameraResultType, CameraSource, Photo } from '@capacitor/camera';
import { Filesystem, Directory } from '@capacitor/filesystem';
import { Preferences } from '@capacitor/preferences';
import { Capacitor } from '@capacitor/core';
接下来,创建一个名为 usePhotoGallery 的函数:
export function usePhotoGallery() {
const takePhoto = async () => {
const photo = await Camera.getPhoto({
resultType: CameraResultType.Uri,
source: CameraSource.Camera,
quality: 100,
});
};
return {
takePhoto,
};
}
我们的 usePhotoGallery hook 暴露了一个名为 takePhoto 的方法,该方法调用 Capacitor 的 getPhoto 方法。
注意这里的奇妙之处:没有特定平台的代码(web、iOS 或 Android)!Capacitor Camera 插件为我们抽象了这些细节,只留下一个方法调用——getPhoto()——它将打开设备相机并允许我们拍照。
我们需要做的最后一步是在 Tab2 页面中使用这个新 hook。回到 Tab2.tsx 并导入该 hook:
import { usePhotoGallery } from '../hooks/usePhotoGallery';