6.6 KiB
📱 Aplikasi Absensi Akademik Berbasis Koordinat dan Foto
📋 Deskripsi Proyek
Aplikasi mobile Android untuk sistem absensi akademik yang menggunakan lokasi GPS dan pengambilan foto untuk validasi kehadiran mahasiswa. Aplikasi ini dirancang untuk mencegah kecurangan absensi dan meningkatkan integritas sistem kehadiran.
✨ Fitur Utama
- 🔐 Login Pengguna - Autentikasi mahasiswa
- 📍 Tracking Lokasi Real-time - Menggunakan Fused Location Provider
- 🏫 Validasi Area Absensi - Radius-based location validation
- 📸 Pengambilan Foto Selfie - Dokumentasi kehadiran
- ✓ Validasi Data - Memastikan semua data lengkap sebelum submit
- 📡 Integrasi N8n Webhook - Pengiriman data ke server
- ⚠️ Error Handling - Pesan error yang user-friendly
- 🔄 Loading States - Visual feedback untuk proses async
🛠️ Tech Stack
- Platform: Android 12+ (API 28+)
- Language: Kotlin
- UI Framework: Jetpack Compose
- Location Services: Google Play Services (Fused Location Provider)
- Camera: Android Camera Intent
- Networking: HttpURLConnection + JSON
- Build Tool: Gradle Kotlin DSL
📦 Struktur Proyek
app/src/main/
├── java/id/ac/ubharajaya/sistemakademik/
│ ├── MainActivity.kt # Main UI dan Activity
│ ├── config/
│ │ └── AttendanceConfig.kt # Konfigurasi aplikasi
│ ├── models/
│ │ └── AttendanceRecord.kt # Data models
│ ├── network/
│ │ └── N8nService.kt # API service untuk N8n
│ ├── utils/
│ │ ├── LocationValidator.kt # Validasi lokasi
│ │ └── ErrorHandler.kt # Error handling
│ └── ui/
│ ├── components/
│ │ └── AttendanceComponents.kt # Reusable UI components
│ └── theme/
│ └── Theme.kt # Material 3 theme
└── res/ # Resources
🚀 Cara Menjalankan
Prerequisites
- Android Studio (Flamingo atau lebih baru)
- Android SDK 28 atau lebih baru
- Device/Emulator dengan Google Play Services
Setup
-
Clone atau buka project
cd Starter-EAS-2025-2026 -
Sinkronisasi Gradle
- Android Studio akan otomatis sinkronisasi atau jalankan:
./gradlew sync -
Update Konfigurasi (opsional)
- Edit
AttendanceConfig.ktuntuk mengubah:- Koordinat referensi kampus
- Radius area absensi
- NPM dan Nama mahasiswa
- Webhook URL
- Edit
-
Build & Run
./gradlew installDebugatau gunakan tombol "Run" di Android Studio
⚙️ Konfigurasi
AttendanceConfig.kt
File ini berisi semua konfigurasi aplikasi:
// Lokasi kampus (latitude, longitude)
const val REFERENCE_LATITUDE = -7.0
const val REFERENCE_LONGITUDE = 110.4
// Radius area absensi (meter)
const val ALLOWED_RADIUS_METERS = 100.0
// Data mahasiswa
const val STUDENT_NPM = "202310715082"
const val STUDENT_NAMA = "Fazri Abdurrahman"
// Webhook endpoints
const val WEBHOOK_PRODUCTION = "https://n8n.lab.ubharajaya.ac.id/webhook/..."
const val WEBHOOK_TEST = "https://n8n.lab.ubharajaya.ac.id/webhook-test/..."
Mengubah Koordinat Referensi
- Buka
AttendanceConfig.kt - Update
REFERENCE_LATITUDEdanREFERENCE_LONGITUDE - Atur
ALLOWED_RADIUS_METERSsesuai kebutuhan - Rebuild aplikasi
🔐 Permissions
Aplikasi memerlukan permissions berikut:
ACCESS_FINE_LOCATION- Untuk GPS precisionACCESS_COARSE_LOCATION- Fallback lokasiCAMERA- Untuk pengambilan fotoINTERNET- Untuk komunikasi dengan server
Semua permissions diminta secara runtime (Android 6+).
📡 API Integration
Webhook N8n
Aplikasi mengirim data ke N8n webhook dengan format:
{
"npm": "202310715082",
"nama": "Fazri Abdurrahman",
"latitude": -7.0251,
"longitude": 110.4105,
"timestamp": 1705250400000,
"foto_base64": "base64_encoded_image_string"
}
Response Handling
- Status 200: Absensi diterima, akan reset form setelah 2 detik
- Status lain: Error, tampilkan pesan error
🎨 UI Components
1. PhotoPreviewCard
Menampilkan preview foto yang diambil dengan opsi untuk ambil ulang.
2. LocationStatusCard
Menampilkan status lokasi, koordinat, dan jarak dari titik referensi.
3. ErrorAlertCard
Card untuk menampilkan error messages yang dismissable.
4. SubmitButtonWithLoader
Button dengan loading indicator untuk submit.
🔧 Validasi Lokasi
Haversine Formula
Aplikasi menggunakan Haversine formula untuk menghitung jarak antara dua koordinat GPS:
d = 2 * R * asin(sqrt(sin²(Δφ/2) + cos(φ1) * cos(φ2) * sin²(Δλ/2)))
Proses Validasi
- Ambil koordinat mahasiswa dari GPS
- Hitung jarak ke koordinat referensi
- Bandingkan dengan ALLOWED_RADIUS_METERS
- Tampilkan status valid/invalid
🐛 Troubleshooting
GPS tidak berfungsi
- Pastikan aplikasi memiliki izin GPS
- Nyalakan location services di device
- Gunakan device dengan Google Play Services
Foto tidak terakses
- Pastikan izin CAMERA granted
- Coba restart aplikasi
Koneksi ke N8n gagal
- Cek internet connection
- Verifikasi webhook URL di
AttendanceConfig.kt - Test dengan
WEBHOOK_TESTterlebih dahulu
Lokasi selalu invalid
- Update koordinat referensi di
AttendanceConfig.kt - Tingkatkan
ALLOWED_RADIUS_METERSjika diperlukan
📊 Testing
Test dengan N8n Webhook Test
- Set
isTest = truedi MainActivity submit button - Data akan dikirim ke
WEBHOOK_TEST - Lihat response di N8n dashboard
Manual Testing Checklist
- Permission request berfungsi
- GPS location terakses
- Camera foto terakses
- Foto preview ditampilkan
- Validasi lokasi bekerja
- Submit ke webhook berhasil
- Error handling tampil dengan baik
📝 Notes
Privacy & Security
- Foto disimpan sebagai JPEG dengan quality 80%
- Koordinat dapat di-offset untuk privacy (lihat
AttendanceConfig.LATITUDE_OFFSET) - Gunakan HTTPS untuk komunikasi dengan server
- Implementasikan authentication token di N8n
Future Improvements
- Attendance history dengan Room Database
- User login screen
- Multiple course support
- Biometric verification
- Offline mode dengan sync
- Push notifications untuk deadline
- QR code verification
📧 Support
Untuk pertanyaan atau masalah, silakan hubungi:
- Institusi: Universitas Bhakti Raharya
- Mata Kuliah: Pemrograman Mobile
- Tahun Ajaran: 2025-2026
📄 License
Project ini dibuat sebagai tugas akademik. Gunakan dengan bijak.
Version: 1.0
Last Updated: January 14, 2026