使用相机拍照
现在是有趣的部分——使用 Capacitor Camera API 添加使用设备相机拍照的功能。我们将从为 Web 构建开始,然后做一些小的调整使其在移动设备(iOS 和 Android)上工作。
为此,我们将创建一个独立的组合函数,与 Vue 的 Composition API 配合使用来管理相册的照片。
如果你不熟悉 Vue 的 Composition API,官方 Vue 文档中的为什么使用 Composition API?是一个很好的入门资源。
在 src/composables/usePhotoGallery.ts 创建新文件并打开它。
我们将从导入将从 Vue 核心和 Capacitor 使用的各种工具开始:
import { ref, onMounted, watch } from 'vue';
import { Camera, CameraResultType, CameraSource, Photo } from '@capacitor/camera';
import { Filesystem, Directory } from '@capacitor/filesystem';
import { Preferences } from '@capacitor/preferences';
接下来,创建一个名为 usePhotoGallery 的函数:
export function usePhotoGallery() {
const takePhoto = async () => {
const photo = await Camera.getPhoto({
resultType: CameraResultType.Uri,
source: CameraSource.Camera,
quality: 100,
});
};
return {
takePhoto,
};
}
我们的 usePhotoGallery 函数暴露了一个名为 takePhoto 的方法,该方法又调用了 Capacitor Camera API 的 getPhoto 方法。
注意这里的奇妙之处:没有平台特定的代码(Web、iOS 或 Android)!Capacitor Camera 插件为我们抽象了这一点,只需要一个方法调用——getPhoto()——它将打开设备相机并允许我们拍照。
最后一步是从 Tab2 页面使用这 个新函数。回到 Tab2.vue 并导入它:
import { usePhotoGallery } from '@/composables/usePhotoGallery';
接下来,在默认导出中,添加一个 setup 方法,作为 Composition API 的一部分。从 usePhotoGallery 中解构出 takePhoto 函数,然后返回它:
<script lang="ts">
import { camera, trash, close } from 'ionicons/icons';
import { IonPage, IonHeader, IonFab, IonFabButton, IonIcon,
IonToolbar, IonTitle, IonContent, IonGrid, IonRow,
IonCol, IonImg } from '@ionic/vue';
import { usePhotoGallery } from '@/composables/usePhotoGallery';
export default {
name: 'Tab2',
components: { IonPage, IonHeader, IonFab, IonFabButton, IonIcon,
IonToolbar, IonTitle, IonContent, IonGrid, IonRow,
IonCol, IonImg },
setup() {
const { takePhoto } = usePhotoGallery();
return {
takePhoto,
camera, trash, close
}
}
}
</script>
保存文件,如果你还没有运行开发服务器,请在浏览器中通过运行 ionic serve 重新启动。在相册标签上,点击相机按钮。如果你的计算机有任何类型的网络摄像头,会出现一个模态窗口。拍一张自拍!

(你的自拍可能比我好得多)
拍照后,它立即消失了。我们还需要将其显示在我们的应用中并保存以供将来访问。