Native modules¶
Cross-platform wrappers around device APIs that are not part of the
view tree: camera and photo gallery, GPS, app-scoped file I/O, and
local notifications. Each module is implemented twice (once per
platform) and dispatches at runtime based on the IS_ANDROID and
IS_IOS flags from pythonnative.utils.
Native API modules for device capabilities.
Provides cross-platform Python interfaces to common device APIs:
Camera: photo capture and gallery picking.Location: GPS and location services.FileSystem: app-scoped file I/O.Notifications: local push notifications.
Each module auto-detects the platform at import time and dispatches to
the appropriate native APIs via Chaquopy (Android) or rubicon-objc (iOS).
On a desktop machine without either runtime, the modules raise
informative RuntimeError instances when called.
Modules:
| Name | Description |
|---|---|
camera |
Cross-platform camera and gallery access. |
file_system |
Cross-platform app-scoped file I/O. |
location |
Cross-platform location / GPS access. |
notifications |
Cross-platform local notifications. |
Classes:
| Name | Description |
|---|---|
Camera |
Camera and image-picker interface. |
FileSystem |
App-scoped file I/O. |
Location |
GPS / location-services interface. |
Notifications |
Local notification interface. |
Camera
¶
Camera and image-picker interface.
All methods are static. They dispatch to the Android or iOS
implementation at call time based on IS_ANDROID (from
pythonnative.utils).
Methods:
| Name | Description |
|---|---|
take_photo |
Launch the device camera to capture a photo. |
pick_from_gallery |
Open the system gallery picker. |
take_photo
staticmethod
¶
Launch the device camera to capture a photo.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
on_result
|
Optional[Callable[[Optional[str]], None]]
|
Callable invoked with the saved image path, or
|
None
|
**options
|
Any
|
Reserved for platform-specific tuning. Currently
unused; future kwargs (e.g., |
{}
|
FileSystem
¶
App-scoped file I/O.
Every instance method operates on either an absolute path or a path
relative to
app_dir.
Errors are swallowed and reported as falsy return values (None
for readers, False for writers) so callers can treat the API as
best-effort.
Methods:
| Name | Description |
|---|---|
app_dir |
Return the app's writable data directory. |
read_text |
Read a text file. |
write_text |
Write a text file, creating parent directories as needed. |
exists |
Return whether a file or directory exists. |
delete |
Delete a single file. |
list_dir |
List the entries in a directory. |
read_bytes |
Read a binary file. |
write_bytes |
Write a binary file, creating parent directories as needed. |
get_size |
Return file size in bytes. |
ensure_dir |
Create a directory (and any missing parents) idempotently. |
join |
Join path components using the OS separator. |
app_dir
staticmethod
¶
app_dir() -> str
Return the app's writable data directory.
On Android the result is Context.getFilesDir(). On iOS it is
the user's Documents directory. On a desktop machine without
either runtime, a .pythonnative_data directory is created
under the user's home folder.
Returns:
| Type | Description |
|---|---|
str
|
Absolute path to the app's data directory. |
read_text
staticmethod
¶
write_text
staticmethod
¶
Write a text file, creating parent directories as needed.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
path
|
str
|
Absolute or |
required |
content
|
str
|
String to write. |
required |
encoding
|
str
|
Text encoding (default |
'utf-8'
|
Returns:
| Type | Description |
|---|---|
bool
|
|
exists
staticmethod
¶
delete
staticmethod
¶
list_dir
staticmethod
¶
read_bytes
staticmethod
¶
write_bytes
staticmethod
¶
get_size
staticmethod
¶
ensure_dir
staticmethod
¶
join
staticmethod
¶
Join path components using the OS separator.
Equivalent to os.path.join(*map(str, parts)). Provided as a
convenience so callers do not need to import os.path
directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*parts
|
Any
|
Path components (each coerced to |
()
|
Returns:
| Type | Description |
|---|---|
str
|
The joined path string. |
Location
¶
GPS / location-services interface.
All methods are static and dispatch to the correct platform implementation at call time.
Methods:
| Name | Description |
|---|---|
get_current |
Request the device's current location. |
get_current
staticmethod
¶
get_current(on_result: Optional[Callable[[Optional[Tuple[float, float]]], None]] = None, **options: Any) -> None
Request the device's current location.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
on_result
|
Optional[Callable[[Optional[Tuple[float, float]]], None]]
|
Callable invoked with |
None
|
**options
|
Any
|
Reserved for platform-specific tuning (e.g.,
|
{}
|
Notifications
¶
Local notification interface.
All methods are static and dispatch to the correct platform implementation at call time.
Methods:
| Name | Description |
|---|---|
request_permission |
Request notification permission from the user. |
schedule |
Schedule a local notification. |
cancel |
Cancel a pending notification by its identifier. |
request_permission
staticmethod
¶
Request notification permission from the user.
On Android, the manifest declaration is normally sufficient for
legacy permission grants and this method calls back with True
without prompting.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
on_result
|
Optional[Callable[[bool], None]]
|
Callable invoked with |
None
|
schedule
staticmethod
¶
schedule(title: str, body: str = '', delay_seconds: float = 0, identifier: str = 'default', **options: Any) -> None
Schedule a local notification.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title
|
str
|
Notification title. |
required |
body
|
str
|
Notification body text. |
''
|
delay_seconds
|
float
|
Seconds from now until delivery. Use |
0
|
identifier
|
str
|
Stable ID used by
|
'default'
|
**options
|
Any
|
Reserved for future tuning (e.g., |
{}
|
Camera¶
Cross-platform camera and gallery access.
Provides static methods for capturing a photo or picking an image from
the device gallery. The platform implementation is selected at call
time and uses Android's Intent/MediaStore APIs or iOS's
UIImagePickerController.
All methods accept an on_result callback that receives either the
saved image path (a str) or None if the user cancels.
Example
Classes:
| Name | Description |
|---|---|
Camera |
Camera and image-picker interface. |
Camera
¶
Camera and image-picker interface.
All methods are static. They dispatch to the Android or iOS
implementation at call time based on IS_ANDROID (from
pythonnative.utils).
Methods:
| Name | Description |
|---|---|
take_photo |
Launch the device camera to capture a photo. |
pick_from_gallery |
Open the system gallery picker. |
take_photo
staticmethod
¶
Launch the device camera to capture a photo.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
on_result
|
Optional[Callable[[Optional[str]], None]]
|
Callable invoked with the saved image path, or
|
None
|
**options
|
Any
|
Reserved for platform-specific tuning. Currently
unused; future kwargs (e.g., |
{}
|
Location¶
Cross-platform location / GPS access.
Provides static methods for requesting the device's current
coordinates. Uses Android's LocationManager or iOS's
CLLocationManager. Permission prompts are triggered by the system the
first time a location-using API is called; ensure the appropriate
manifest entries (android.permission.ACCESS_FINE_LOCATION) and
Info.plist keys (NSLocationWhenInUseUsageDescription) are present.
Example
Classes:
| Name | Description |
|---|---|
Location |
GPS / location-services interface. |
Location
¶
GPS / location-services interface.
All methods are static and dispatch to the correct platform implementation at call time.
Methods:
| Name | Description |
|---|---|
get_current |
Request the device's current location. |
get_current
staticmethod
¶
get_current(on_result: Optional[Callable[[Optional[Tuple[float, float]]], None]] = None, **options: Any) -> None
Request the device's current location.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
on_result
|
Optional[Callable[[Optional[Tuple[float, float]]], None]]
|
Callable invoked with |
None
|
**options
|
Any
|
Reserved for platform-specific tuning (e.g.,
|
{}
|
File system¶
Cross-platform app-scoped file I/O.
Provides static helpers for reading, writing, and deleting files in the
app's sandboxed storage area. Relative paths are resolved against
FileSystem.app_dir;
absolute paths are used as-is.
Example
Classes:
| Name | Description |
|---|---|
FileSystem |
App-scoped file I/O. |
FileSystem
¶
App-scoped file I/O.
Every instance method operates on either an absolute path or a path
relative to
app_dir.
Errors are swallowed and reported as falsy return values (None
for readers, False for writers) so callers can treat the API as
best-effort.
Methods:
| Name | Description |
|---|---|
app_dir |
Return the app's writable data directory. |
read_text |
Read a text file. |
write_text |
Write a text file, creating parent directories as needed. |
exists |
Return whether a file or directory exists. |
delete |
Delete a single file. |
list_dir |
List the entries in a directory. |
read_bytes |
Read a binary file. |
write_bytes |
Write a binary file, creating parent directories as needed. |
get_size |
Return file size in bytes. |
ensure_dir |
Create a directory (and any missing parents) idempotently. |
join |
Join path components using the OS separator. |
app_dir
staticmethod
¶
app_dir() -> str
Return the app's writable data directory.
On Android the result is Context.getFilesDir(). On iOS it is
the user's Documents directory. On a desktop machine without
either runtime, a .pythonnative_data directory is created
under the user's home folder.
Returns:
| Type | Description |
|---|---|
str
|
Absolute path to the app's data directory. |
read_text
staticmethod
¶
write_text
staticmethod
¶
Write a text file, creating parent directories as needed.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
path
|
str
|
Absolute or |
required |
content
|
str
|
String to write. |
required |
encoding
|
str
|
Text encoding (default |
'utf-8'
|
Returns:
| Type | Description |
|---|---|
bool
|
|
exists
staticmethod
¶
delete
staticmethod
¶
list_dir
staticmethod
¶
read_bytes
staticmethod
¶
write_bytes
staticmethod
¶
get_size
staticmethod
¶
ensure_dir
staticmethod
¶
join
staticmethod
¶
Join path components using the OS separator.
Equivalent to os.path.join(*map(str, parts)). Provided as a
convenience so callers do not need to import os.path
directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*parts
|
Any
|
Path components (each coerced to |
()
|
Returns:
| Type | Description |
|---|---|
str
|
The joined path string. |
Notifications¶
Cross-platform local notifications.
Provides static methods for requesting permission, scheduling, and
cancelling local push notifications. Uses Android's
NotificationManager or iOS's UNUserNotificationCenter.
On iOS, you must call
request_permission
before scheduling. On Android 13+, the equivalent runtime permission
should be requested through standard Android APIs (the manifest
declaration is otherwise sufficient).
Example
Classes:
| Name | Description |
|---|---|
Notifications |
Local notification interface. |
Notifications
¶
Local notification interface.
All methods are static and dispatch to the correct platform implementation at call time.
Methods:
| Name | Description |
|---|---|
request_permission |
Request notification permission from the user. |
schedule |
Schedule a local notification. |
cancel |
Cancel a pending notification by its identifier. |
request_permission
staticmethod
¶
Request notification permission from the user.
On Android, the manifest declaration is normally sufficient for
legacy permission grants and this method calls back with True
without prompting.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
on_result
|
Optional[Callable[[bool], None]]
|
Callable invoked with |
None
|
schedule
staticmethod
¶
schedule(title: str, body: str = '', delay_seconds: float = 0, identifier: str = 'default', **options: Any) -> None
Schedule a local notification.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title
|
str
|
Notification title. |
required |
body
|
str
|
Notification body text. |
''
|
delay_seconds
|
float
|
Seconds from now until delivery. Use |
0
|
identifier
|
str
|
Stable ID used by
|
'default'
|
**options
|
Any
|
Reserved for future tuning (e.g., |
{}
|
Next steps¶
- See guidance and permission setup in Native modules guide.