3.8 KiB
3.8 KiB
SAIpp - Barcode Scanner & MariaDB Connector
Android application developed in Kotlin using Jetpack Compose that scans barcodes and saves them directly to a self-hosted MariaDB database.
🚀 Features
- Instant Scan: The camera opens when adding a new SAI.
- Multi-Entity Management: Dedicated sections for SAIs, Batteries, and People.
- CRUD Operations: Add, View, and Delete records for all managed entities.
- Connection Status: Real-time indicator on the home screen.
- Visual Overlay: Centered scanning guide with a red line to help align barcodes.
- ML Kit Integration: High-performance barcode detection (HD 720p analysis).
- Confirmation Flow: Scanned results are shown in a popup dialog before saving.
- MariaDB Connectivity: Direct connection to a remote database via JDBC.
- Localization: All app strings are managed in
strings.xmlfor easy translation. - Modern UI: Built with Jetpack Compose and Material 3.
- Permission Handling: Automatic runtime camera permission requests.
🛠️ Requirements
- Android device with API 34+ (Android 14+).
- MariaDB Server accessible from the mobile device network on port 3306.
- Camera hardware.
📱 User Interface
The app features a professional scanning interface:
- Connection Bar: A status pill at the top (Green: Connected, Red: Error, Gray: Checking).
- Scanner Guide: A white square frame indicates the target area with a red alignment line.
- Detection Popup: When a code is read, a dialog appears with the value.
- Database Actions: Buttons to "Guardar" (Save) or "Cerrar" (Dismiss).
⚙️ Configuration
1. Database Setup
Ensure your MariaDB database has the following tables:
-- Table for SAIs
CREATE TABLE SAIs (
id_sai INT AUTO_INCREMENT PRIMARY KEY,
ns VARCHAR(255) NOT NULL
);
-- Table for Batteries
CREATE TABLE Bateria (
id_bateria INT AUTO_INCREMENT PRIMARY KEY,
id_sai INT,
marca VARCHAR(255),
fecha_instalacion DATETIME,
FOREIGN KEY (id_sai) REFERENCES SAIs(id_sai)
);
-- Table for People
CREATE TABLE Persona (
id_persona INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255) NOT NULL
);
-- Table for Assignments
CREATE TABLE Asignado (
id_asignacion INT AUTO_INCREMENT PRIMARY KEY,
id_sai INT,
id_persona INT,
fecha_asignado DATE,
fecha_devolucion DATE,
FOREIGN KEY (id_sai) REFERENCES SAIs(id_sai),
FOREIGN KEY (id_persona) REFERENCES Persona(id_persona)
);
2. App Credentials
Update your database connection details in:
app/src/main/java/com/example/saipp/data/MariaDbConnection.kt
Important
Use the raw domain or IP for the
HOST. Do NOT includehttps://.
private const val HOST = "mariadb.peta9.com" // Example: "192.168.1.50"
private const val PORT = "3306"
private const val DATABASE = "sais_db"
private const val USER = "sais_dba"
private const val PASSWORD = "your_password"
3. Network Access
- Ensure the MariaDB port (default 3306) is open.
- Your MariaDB user must allow remote connections:
GRANT ALL PRIVILEGES ON sais_db.* TO 'sais_dba'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;
📦 Dependencies
- CameraX: For camera preview and high-resolution frame capture.
- ML Kit Barcode Scanning: For processing all barcode formats.
- MariaDB Java Client: JDBC driver for database communication.
- Coroutines: For asynchronous database and connection checks.
⚠️ Security Warning
Caution
This project uses a direct JDBC connection. This is suitable for personal projects or internal tools, but is not recommended for production apps as it requires storing credentials in the code and exposing database ports.
📄 License
This project is for educational/personal use.