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

  1. Clone atau buka project

    cd Starter-EAS-2025-2026
    
  2. Sinkronisasi Gradle

    • Android Studio akan otomatis sinkronisasi atau jalankan:
    ./gradlew sync
    
  3. Update Konfigurasi (opsional)

    • Edit AttendanceConfig.kt untuk mengubah:
      • Koordinat referensi kampus
      • Radius area absensi
      • NPM dan Nama mahasiswa
      • Webhook URL
  4. Build & Run

    ./gradlew installDebug
    

    atau 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

  1. Buka AttendanceConfig.kt
  2. Update REFERENCE_LATITUDE dan REFERENCE_LONGITUDE
  3. Atur ALLOWED_RADIUS_METERS sesuai kebutuhan
  4. Rebuild aplikasi

🔐 Permissions

Aplikasi memerlukan permissions berikut:

  • ACCESS_FINE_LOCATION - Untuk GPS precision
  • ACCESS_COARSE_LOCATION - Fallback lokasi
  • CAMERA - Untuk pengambilan foto
  • INTERNET - 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

  1. Ambil koordinat mahasiswa dari GPS
  2. Hitung jarak ke koordinat referensi
  3. Bandingkan dengan ALLOWED_RADIUS_METERS
  4. 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_TEST terlebih dahulu

Lokasi selalu invalid

  • Update koordinat referensi di AttendanceConfig.kt
  • Tingkatkan ALLOWED_RADIUS_METERS jika diperlukan

📊 Testing

Test dengan N8n Webhook Test

  1. Set isTest = true di MainActivity submit button
  2. Data akan dikirim ke WEBHOOK_TEST
  3. 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