Sistem Akademik - Aplikasi Absensi Mahasiswa
Aplikasi mobile untuk sistem absensi akademik dengan fitur GPS tracking, pengambilan foto, dan manajemen mata kuliah. Dibangun menggunakan Kotlin dan Jetpack Compose dengan Material Design 3.
🎯 Fitur Utama
1. Absensi Akademik
- Pengambilan lokasi real-time menggunakan GPS
- Capture foto selfie untuk verifikasi kehadiran
- Pemilihan mata kuliah yang sedang diambil
- Submit absensi langsung ke server N8N
- Riwayat kehadiran dengan detail lengkap
2. Manajemen Mata Kuliah
- Daftar mata kuliah dengan informasi lengkap
- Detail dosen pengampu
- Lokasi/ruangan kuliah
- Jumlah SKS (Sistem Kredit Semester)
3. Profil Mahasiswa
- Informasi dasar mahasiswa
- Program studi
- Tahun akademik dan semester
- Status akademik
4. Keamanan
- Login dengan NPM dan password
- Permission handling untuk camera dan lokasi
- Data encryption untuk komunikasi server
📋 Requirements
- Android SDK: 24 (API Level 24 - Android 7.0) atau lebih tinggi
- Kotlin: 1.9+
- Compose: 1.5.3+
- Google Play Services: Location API v21.0.1
🚀 Instalasi
1. Clone Repository
git clone <repository-url>
cd sistem-akademik
2. Setup Build.gradle
Copy seluruh kode dari artifact build.gradle (Module: app) ke file:
app/build.gradle
Kemudian sync gradle:
- Klik "Sync Now" di Android Studio
3. Copy File Kotlin
Salin 3 file Kotlin ke folder: app/src/main/java/id/ac/ubharajaya/sistemakademik/
Files:
Absensi.kt- Data class untuk absensiLoginActivity.kt- Login screenMainActivity.kt- Main application
4. Update AndroidManifest.xml
Lokasi: app/src/main/AndroidManifest.xml
Pastikan sudah ada:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.CAMERA"/>
5. Clean & Build
Build → Clean Project
Build → Rebuild Project
6. Run Aplikasi
- Tekan Shift + F10 atau klik tombol Run
- Pilih emulator atau device
- Tunggu app launch
🔐 Login Credentials
Demo Account:
- NPM:
202310715038 - Password:
Nuryuda28
⚠️ Untuk production, ganti dengan system backend authentication yang proper!
📱 Cara Penggunaan
Tab 1: Absensi Akademik
-
Ambil Lokasi
- Aplikasi otomatis mengambil lokasi GPS saat pertama kali dibuka
- Izinkan akses lokasi saat diminta
-
Ambil Foto
- Klik tombol "Ambil Foto"
- Izinkan akses kamera
- Ambil selfie untuk verifikasi
-
Kirim Absensi
- Pastikan semua data lengkap (lokasi, foto, mata kuliah)
- Klik tombol "Kirim Absensi"
- Tunggu konfirmasi dari server
-
Lihat Riwayat
- Scroll ke bawah untuk melihat riwayat kehadiran
- Setiap record menampilkan detail lengkap
Tab 2: Profil
- Informasi dasar mahasiswa
- Program studi
- Status akademik
- Tahun akademik dan semester
🔄 Integrasi Server
N8N Webhook
Aplikasi mengirim data absensi ke webhook N8N:
URL: https://n8n.lab.ubharajaya.ac.id/webhook/23c6993d-1792-48fb-ad1c-ffc78a3e6254
Method: POST
Content-Type: application/json
Data yang dikirim:
{
"npm": "202310715038",
"nama": "Nuryuda Maulana Fahmi",
"latitude": -6.123456,
"longitude": 106.123456,
"timestamp": 1705225800000,
"waktu": "14 Jan 2024 10:30:00",
"foto_base64": "base64_encoded_image_data"
}
🛠️ Troubleshooting
Error: "Cannot find symbol 'School'"
Solusi: Pastikan import icons di MainActivity.kt sudah benar
import androidx.compose.material.icons.filled.School
import androidx.compose.material.icons.filled.CameraAlt
Error: "LocationServices not found"
Solusi: Pastikan dependency play-services-location ada di build.gradle:
implementation 'com.google.android.gms:play-services-location:21.0.1'
Error: "Permission denied untuk camera/lokasi"
Solusi:
- Untuk emulator: Settings > Apps > Permissions > izinkan akses
- Untuk device: Buka Settings > Apps > Sistem Akademik > Permissions
Error: "Gradle Sync Failed"
Solusi:
1. File → Invalidate Caches and Restart
2. Atau close & open ulang Android Studio
3. Build → Clean Project
4. Build → Sync with File System
Foto tidak keluar di riwayat
Solusi: Pastikan bitmap compression berhasil, check logcat untuk error
Lokasi menunjukkan "Lokasi tidak tersedia"
Solusi:
- Emulator: Gunakan GPS emulation di Android Virtual Device
- Device: Turn on Location services & izinkan akses GPS
📊 Struktur Project
sistemakademik/
├── Absensi.kt # Data class absensi
├── LoginActivity.kt # Login screen
├── MainActivity.kt # Main app dengan 3 tab
├── ui/
│ └── theme/
│ └── Theme.kt # Material Design 3 theme
├── res/
│ ├── values/
│ │ └── strings.xml
│ └── drawable/
└── AndroidManifest.xml
🔧 Customization
Ganti Data Mata Kuliah
Edit function getDaftarMataKuliah() di MainActivity.kt:
fun getDaftarMataKuliah(): List<MataKuliah> {
return listOf(
MataKuliah(
id = "1",
nama = "Nama Mata Kuliah",
kode = "IF-401",
dosen = "Nama Dosen",
ruangan = "Lokasi Ruang",
sks = 3
),
// Tambah lebih banyak mata kuliah
)
}
Ganti Webhook URL
Edit di MainActivity.kt function kirimKeN8n():
val url = URL("https://your-webhook-url-here")
Ganti Data Mahasiswa
Edit di AbsensiScreen function:
val absensi = Absensi(
npm = "NPM_KAMU",
nama = "NAMA_KAMU",
latitude = latitude!!,
longitude = longitude!!,
waktu = waktu,
foto = foto!!
)
📦 Dependencies
| Library | Version | Purpose |
|---|---|---|
| androidx.compose.ui | 1.5.3 | UI Framework |
| androidx.compose.material3 | 1.1.1 | Material Design 3 |
| com.google.android.gms:play-services-location | 21.0.1 | GPS Location |
| org.json | 20230227 | JSON Handling |
🎨 Design
- Material Design 3 dengan sistem warna yang konsisten
- Bottom Navigation Bar untuk navigasi antar halaman
- Card-based Layout untuk presentasi data
- Rounded Corners di semua elemen UI
- Icon-based Navigation untuk UX yang lebih baik
📝 License
Proyek ini dibuat untuk keperluan akademik di Universitas Bhayangkara Jakarta Raya.
👥 Author
- Name: Nuryuda Maulana Fahmi
- NPM: 202310715038
- University: Universitas Bhayangkara Jakarta Raya
📞 Support
Untuk pertanyaan atau issue:
- Cek bagian Troubleshooting di atas
- Lihat logcat untuk error details
- Hubungi tim development
✨ Fitur yang Akan Datang
- Backend authentication server
- Database lokal dengan Room
- Geofencing untuk verifikasi lokasi
- Attendance analytics & reporting
- QR code scanning
- Push notifications
- Offline mode dengan sync kemudian
Last Updated: January 2024 Status: Production Ready ✅