@sigx/lynx-camera
v0.9.1
Published
Camera capture for sigx-lynx
Maintainers
Readme
@sigx/lynx-camera
Photo capture via the system camera for sigx-lynx. iOS uses UIImagePickerController; Android uses an ACTION_IMAGE_CAPTURE intent fed by a FileProvider URI (the cache-path is wired by the app template's manifest).
📚 Documentation
Full guides, API reference and live examples → https://sigx.dev/lynx/modules/camera/overview/
Install
pnpm add @sigx/lynx-camerasigx prebuild auto-discovers the package, links the native module, injects android.permission.CAMERA, and adds the iOS usage descriptions:
NSCameraUsageDescriptionNSMicrophoneUsageDescriptionNSPhotoLibraryAddUsageDescriptionOverride the prompts in yoursignalx.config.tsunderios.usageDescriptionsif you want app-specific copy:
// signalx.config.ts
export default defineLynxConfig({
ios: {
usageDescriptions: {
NSCameraUsageDescription: 'Acme uses the camera to scan QR codes.',
},
},
});On Android the runtime permission prompt + Activity Result wiring comes from @sigx/lynx-permissions, a dependency of this package — the auto-linker pulls it in, nothing to install.
Usage
import { Camera } from '@sigx/lynx-camera';
const { status } = await Camera.requestPermission();
if (status === 'granted') {
const photo = await Camera.takePicture({ quality: 0.8, facing: 'back' });
console.log(photo.uri, photo.width, photo.height);
}API
| Method | Notes |
| --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| takePicture(options?: CameraOptions): Promise<PhotoResult> | Opens the system camera. Returns the captured photo's file URI + dimensions. Throws if cancelled or denied. |
| requestPermission(): Promise<PermissionResponse> | Shows the OS permission dialog if needed. Re-call to surface the dialog again on first denial. |
| getPermissionStatus(): Promise<PermissionResponse> | Read-only check — no prompt. |
| isAvailable(): boolean | Whether the native module is registered in the current build. |
interface CameraOptions {
facing?: 'front' | 'back'; // default: 'back'
quality?: number; // 0..1
maxWidth?: number; // pixels
maxHeight?: number; // pixels
}
interface PhotoResult {
uri: string; // file:// URI
width: number;
height: number;
base64?: string; // populated only if requested
}Gotchas
- Android FileProvider — the auto-injected
<provider>in the app template'sAndroidManifest.xmlexposes the cache directory under${applicationId}.fileprovider. If you customize the manifest, keep that authority intact or the camera intent won't have a valid write target. - iOS simulator camera — the simulator has a synthetic camera feed, not a real one. Test capture on a physical device.
