For "choose a photo", don't build a gallery: launchImageLibraryAsync() opens the system picker and returns only what the user picked, and launchCameraAsync() opens the system camera app for a single shot.
const result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ['images'], quality: 0.7 });
if (result.canceled) return;
const { uri, width, height } = result.assets[0];
console.log('picked', width, 'x', height);On Android 13 and later the call opens Android's Photo Picker (left in the figure in Cover Photo Scanner), which tells the user "booknest will only have access to the photos you select". The app needs no storage permission at all, and the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE entries BookNest blocked in Android Permissions stay blocked. quality (0 to 1) recompresses JPEGs, allowsEditing adds a crop step, and allowsMultipleSelection returns several assets. The returned uri points into the app's cache, a copy the app may read, upload or move.
expo-media-library is the other tool, for apps that must list albums, read many assets or save photos into the gallery. It asks for the media permissions the picker avoids, and Google Play 1 restricts broad photo access to apps whose core feature needs it, so prefer the picker whenever one photo at a time will do.