スマホ機能
カメラの利用
expo-image-picker
expo-image-pickerパッケージを使用することでOSに搭載されているカメラアプリを呼び出し、写真の撮影を行うことができます。
カメラアプリを使用する場合はユーザーの許可が必要になります。処理は以下のようになります。
- 「カメラ使用」の許可申請メソッドを呼び出す。
- 「許可する」と返された場合はカメラアプリ起動メソッドを呼び出す。
- 写真が撮影された/撮影されなかった(キャンセルされた)に応じて処理を行う。
async takePicture() {
// カメラの使用許可
const res = await ImagePicker.requestCameraPermissionsAsync();
if (res.status !== 'granted') {
return;
}
// カメラアプリを呼び出し撮影
const result = await ImagePicker.launchCameraAsync();
// 写真が撮影された場合はstateを更新する
if (!result.cancelled) {
this.setState({imageUri: result.uri});
}
}
カメラロールからの画像選択
SNSなどでは「今撮影した」写真以外に、「以前に撮影した(または写真以外のイラストなど)」をカメラロール(Androidではギャラリーやアルバムと呼ばれます)から選んで投稿する機能もあります。expo-image-pickerではこの「カメラロールから画像を選ぶ」ようにアプリを作成することも可能です。
撮影画像の保存
expo-image-pickerパッケージでは撮影した画像はキャッシュ領域に保存されるため、これをカメラロールが管理する領域に保存する必要があります。カメラロールに保存するにはexpo-media-libraryパッケージを使います。
カメラロールへの保存も同じように許可申請と実際の保存処理の手順になります。
// カメラロールの使用許可
const res2 = await MediaLibrary.requestPermissionsAsync();
if (res2.status !== 'granted') {
return;
}
// カメラアプリを呼び出し撮影
const result = await ImagePicker.launchCameraAsync();
// 写真が撮影された場合はstateを更新する
if (!result.cancelled) {
this.setState({imageUri: result.uri});
// 撮影画像をカメラロールに保存
await MediaLibrary.saveToLibraryAsync(result.uri)
}