128 lines
4.0 KiB
Markdown
128 lines
4.0 KiB
Markdown
# 📍 Perbaikan Sistem Lokasi Absensi
|
|
|
|
## 🔧 Masalah yang Diperbaiki
|
|
|
|
### 1. **Koordinat Kampus Salah**
|
|
- **Sebelum**: Menggunakan koordinat San Jose, USA (37.4220, -122.0840) ❌
|
|
- **Sesudah**: Menggunakan koordinat UBH Bekasi, Indonesia (-6.2447, 106.9956) ✅
|
|
|
|
### 2. **Ketidakkonsistenan Radius**
|
|
- **Sebelum**: Berbeda di beberapa tempat (200m vs 250m vs 500m) ❌
|
|
- **Sesudah**: Konsisten menggunakan 250 meter di semua bagian ✅
|
|
|
|
## 📝 Perubahan Kode
|
|
|
|
### File: `MainActivity.kt`
|
|
|
|
#### ✅ Perubahan 1: Fungsi `isWithinAbsensiRadius()`
|
|
```kotlin
|
|
fun isWithinAbsensiRadius(
|
|
studentLat: Double,
|
|
studentLon: Double,
|
|
campusLat: Double = -6.2447, // ✅ Koordinat UBH Bekasi
|
|
campusLon: Double = 106.9956, // ✅ Koordinat UBH Bekasi
|
|
radiusMeters: Float = 250f // ✅ Radius 250 meter
|
|
): Boolean {
|
|
val distance = calculateDistance(studentLat, studentLon, campusLat, campusLon)
|
|
return distance <= radiusMeters
|
|
}
|
|
```
|
|
|
|
#### ✅ Perubahan 2: Pengecekan Lokasi di `AbsensiScreen`
|
|
```kotlin
|
|
isLocationValid = distance <= 250f // ✅ Konsisten dengan fungsi
|
|
```
|
|
|
|
#### ✅ Perubahan 3: Tampilan Radius di UI
|
|
```kotlin
|
|
Text("Radius Maksimal: 250 meter") // ✅ Sesuai dengan validasi
|
|
```
|
|
|
|
## 🗺️ Koordinat UBH (Universitas Bhayangkara Jakarta Raya)
|
|
|
|
| Informasi | Nilai |
|
|
|-----------|-------|
|
|
| **Lokasi** | Bekasi, Jawa Barat, Indonesia |
|
|
| **Alamat** | Jl. Ulupamulur No.1, Margasari, Kec. Bekasi Sel. |
|
|
| **Latitude** | -6.2447° |
|
|
| **Longitude** | 106.9956° |
|
|
| **Radius Absensi** | 250 meter |
|
|
| **Catatan** | Koordinat di-offset untuk privasi |
|
|
|
|
## ✨ Fitur Sistem Lokasi
|
|
|
|
### 1. **Otomatis Mengambil Lokasi GPS**
|
|
- Aplikasi meminta izin akses lokasi saat masuk ke halaman Absensi
|
|
- Menggunakan Fused Location Provider dari Google Play Services
|
|
- Menampilkan koordinat Latitude & Longitude real-time
|
|
|
|
### 2. **Validasi Jarak Otomatis**
|
|
- Menghitung jarak mahasiswa dari titik kampus
|
|
- Jika **≤ 250 meter** → **Status: ✓ Valid**
|
|
- Jika **> 250 meter** → **Status: ✗ Tidak Valid**
|
|
|
|
### 3. **UI Feedback Real-Time**
|
|
- Card berwarna **hijau** jika lokasi valid
|
|
- Card berwarna **merah** jika lokasi tidak valid
|
|
- Menampilkan jarak dalam meter
|
|
- Tombol "Kirim Absensi" hanya aktif jika semua syarat terpenuhi
|
|
|
|
### 4. **Kondisi Absensi Berhasil**
|
|
Mahasiswa dapat melakukan absensi jika **SEMUA** kondisi terpenuhi:
|
|
- ✅ Lokasi GPS valid (dalam radius 250m)
|
|
- ✅ Foto sudah diambil
|
|
- ✅ Ada koneksi internet
|
|
|
|
## 🚀 Cara Menggunakan
|
|
|
|
### Langkah-langkah Absensi:
|
|
1. **Login** dengan NPM dan Password
|
|
2. Tunggu sistem mengambil koordinat GPS otomatis
|
|
3. Lihat status lokasi di card informasi:
|
|
- ✓ Valid → Lanjut ke langkah 4
|
|
- ✗ Tidak Valid → Pindah ke zona kampus
|
|
4. Tap tombol **"📷 Ambil Foto"** untuk ambil selfie
|
|
5. Tap tombol **"📤 Kirim Absensi"** untuk submit
|
|
|
|
### Testing:
|
|
```
|
|
Untuk testing dengan lokasi di luar radius:
|
|
- GPS akan membaca lokasi aktual Anda
|
|
- Jika di luar radius 250m → Status "Tidak Valid"
|
|
- Jika di dalam radius 250m → Status "Valid"
|
|
|
|
Koordinat kampus referensi:
|
|
Latitude: -6.2447
|
|
Longitude: 106.9956
|
|
```
|
|
|
|
## 📊 Validasi & Testing
|
|
|
|
### Checklist:
|
|
- ✅ Koordinat UBH benar (Bekasi, Indonesia)
|
|
- ✅ Radius konsisten 250 meter di semua bagian
|
|
- ✅ Validasi lokasi bekerja otomatis
|
|
- ✅ UI menampilkan feedback yang jelas
|
|
- ✅ Tombol hanya aktif saat semua syarat terpenuhi
|
|
- ✅ Data disimpan di database lokal & dikirim ke N8N webhook
|
|
|
|
## 🔐 Catatan Keamanan & Privasi
|
|
|
|
1. **Koordinat di-offset** - Koordinat asli kampus tidak ditampilkan ke user
|
|
2. **GPS Accuracy** - Menggunakan akurasi Fused Location Provider
|
|
3. **Data Tersimpan Lokal** - Riwayat disimpan di SQLite database lokal
|
|
4. **Webhook Production** - Data dikirim ke N8N untuk verifikasi server
|
|
|
|
## 📱 Info Teknis
|
|
|
|
- **Database**: SQLite (Akademik.db)
|
|
- **Location Service**: Fused Location Provider
|
|
- **Backend**: N8N Webhook
|
|
- **Permission**: ACCESS_FINE_LOCATION, CAMERA, INTERNET
|
|
|
|
---
|
|
**Status**: ✅ Siap untuk Production
|
|
**Last Updated**: 2026-01-14
|
|
**Version**: 2.0
|
|
|