rns-mediapicker
v0.1.4
Published
High-performance React Native module for picking media on Android and iOS.
Downloads
1,622
Maintainers
Readme
🎵 / 🖼️ / 🎥 rns-mediapicker
A high-performance native media picker for React Native and Expo.
Supports audio, image, and video selection from camera or library, automatic JPEG compression, EXIF-safe dimensions, and transparent-image flattening.
🚀 Installation
Choose any method:
yarn add rns-mediapickernpm install rns-mediapickernpx expo install rns-mediapicker⚙️ Expo Configuration
Add the plugin to your app.json or app.config.js.
This automatically configures:
- iOS permissions (
Info.plist) - Android intent queries
- Android
FileProvider
{
"expo": {
"plugins": ["rns-mediapicker"]
}
}🧑💻 Usage
import MediaPicker from 'rns-mediapicker';
const pickMedia = async () => {
try {
const result = await MediaPicker.pick(
false, // useCamera: true = camera, false = picker
'both', // mediaType: 'audio' | 'image' | 'video' | 'both'
'back' // env: 'front' | 'back' (camera only)
);
console.log('URI:', result.uri);
console.log('Type:', result.type);
console.log('Width:', result.width);
console.log('Height:', result.height);
console.log('Is Video:', result.isVideo);
console.log('Is Audio:', result.isAudio);
} catch (error) {
if (error.code === 'E_CANCELLED') {
console.log('User cancelled picker');
} else {
console.error('Picker error:', error.message);
}
}
};🧩 API Reference
pick(useCamera, mediaType, env)
| Parameter | Type | Description |
|-----------|----------|-------------|
| useCamera | boolean | true opens the camera, false opens the media picker |
| mediaType | string | 'audio', 'image', 'video', or 'both' |
| env | string | 'front' or 'back' camera (camera mode only) |
📦 Response Object
{
uri: string; // Local file URI
width: number; // Media width (0 for audio)
height: number; // Media height (0 for audio)
type: string; // 'image' | 'video' | 'audio'
isVideo: boolean; // Helper flag
isAudio: boolean; // Helper flag
}✨ Features
- 🎵 Audio / 🖼️ Image / 🎥 Video support
- 📷 Camera and 📁 Library selection
- 🎬 Camera video capture (Android & iOS)
- 🗜️ Automatic JPEG compression
- ⬜ White-background flattening for transparent images
- 🔄 EXIF-safe rotation and accurate dimensions
- 📂 Scoped-storage safe temporary files
- 🤖 Android 11+ intent queries handled automatically
- 🔐 Android
FileProviderpreconfigured - 🍎 iOS swipe-to-dismiss cancellation handling
- 🧹 Clean promise lifecycle (no leaks)
📝 Notes
- All returned files are copied into the app’s temporary cache directory
- Audio files preserve original encoding
- Front camera selection is best-effort on Android
- No external native dependencies required
📄 License
MIT
