Skip to content
anantyanPublic

About

PulseBLE - Real-Time BLE Scanner, Proximity Radar & Device Tracker for Android (Jetpack Compose, Room, Hilt)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

21 Commits

Folders and files

Repository files navigation

PulseBLE πŸ“‘

Real-Time Bluetooth LE Proximity Tracker & Tactical Radar

Release Android Target SDK Kotlin Compose AGP Architecture License

Study Case: Mobile Engineer Take-Home Challenge
PulseBLE adalah aplikasi Android modern untuk mendeteksi sinyal periklanan (advertising packets) perangkat Bluetooth Low Energy (BLE) di sekitar secara real-time, memantau stabilitas kekuatan sinyal (RSSI), dan melacak kedekatan target menggunakan visualisasi radar konsentris taktis (Tactical Concentric Radar View).


πŸ“‘ Daftar Isi


πŸ“Έ Tangkapan Layar Aplikasi (Screenshots Showcase)

Berikut adalah antarmuka visual PulseBLE v1.0.6 yang diuji langsung pada perangkat keras fisik Xiaomi POCO (Android 16 / SDK 37):

1. Splash Screen (v1.0.6) 2. Dashboard Scanner 3. Tactical Radar Canvas
Splash Screen v1.0.6 Scanner Screen Radar Screen
Radar Logo & Dynamic Version Live BLE Scan & 44dp Pill Search 360Β° Sweep & Real-Time Sparkline
4. Riwayat Perangkat (Room DB) 5. Dialog Konsisten M3
History Screen Rename Dialog
Penyimpanan SQLite & Track Again 36dp Material 3 AlertDialog & DarkSurface

🌟 Fitur Utama

1. Dashboard Utama (Scanner)

  • Real-Time Scanning: Mendeteksi sinyal beacon BLE aktif dengan native BluetoothLeScanner menggunakan coroutine callbackFlow.
  • Informasi Lengkap: Menampilkan Nama Perangkat, MAC Address/UUID, RSSI mentah (raw dBm), estimasi jarak (meter), dan meteran sinyal 4-bar visual.
  • Kontrol Manual: Tombol Mulai Scan dan Hentikan Scan yang responsif langsung pada Top App Bar dengan indikator dinamis (SCANNING / STANDBY).
  • Filter & Pengurutan Cerdas (PRD 2.2):
    • Otomatis mengurutkan daftar berdasarkan sinyal terkuat (RSSI tertinggi descending).
    • Kolom pencarian instan berdesain Full-Pill Compact (44dp) berdasarkan Nama Perangkat atau MAC Address.
    • Tombol slider filter melingkar simetris (44dp circular) untuk mengatur ambang batas sinyal minimum (Minimum RSSI Threshold Filter, misal $\ge -80\text{ dBm}$).
  • Snap Scroll Bar: Search bar dan tombol filter otomatis tersembunyi halus saat scroll ke bawah (scroll down) dan muncul kembali saat scroll ke atas (scroll up) guna memaksimalkan ruang pandang daftar perangkat.
  • Stabilitas Posisi Scroll & Re-ordering Halus (v1.0.6): Posisi scroll tetap stabil (smart scroll anchoring) saat data BLE terus diperbarui. Saat berada di paling atas (top), list terkunci di indeks 0 offset 0 sehingga item baru/terkuat tertata ke bawah secara alami tanpa ada item tersembunyi di atas layar. Saat pengguna membaca di bagian tengah/bawah (middle/bottom), item yang sedang dilihat tetap terkunci posisinya dan tidak meloncat saat ranking RSSI berganti. Dilengkapi animasi re-order Modifier.animateItem() yang mulus.

2. Detail Pelacakan (Tactical Radar View)

  • Concentric Radar Canvas: Visualisasi radar taktis dengan 5 lingkaran jarak konsentris (<1m, 1-3m, 3-10m, 10-20m, >20m), animasi sapuan berkas radar berputar (sweeping beam), dan penanda target (blip marker) dengan efek denyut aura (pulsating aura).
  • Indikator Kategori Sinyal Dinamis: Badge visual yang berubah warna dan teks secara dinamis sesuai kategori zona kedekatan PRD tanpa outline/background kaku untuk estetika modern minimalis.
  • Real-Time RSSI Sparkline Graph: Grafik riwayat tren kekuatan sinyal 25 paket terakhir untuk memantau apakah perangkat sedang mendekat atau menjauh.
  • Metrik Kestabilan Koneksi: Pemantauan frekuensi penerimaan paket (Update Rate dalam Hz) dan tingkat fluktuasi sinyal (Signal Jitter).
  • Haptic Proximity Ping: Getaran taktil adaptif yang berdenyut lebih rapat dan intens saat target mendekat (<1 meter atau 1-3 meter).
  • Ubah Nama Kustom: Dialog modal ganti nama perangkat (Custom Alias) yang tersimpan persisten ke basis data lokal.

3. Riwayat Perangkat (History Log)

  • Penyimpanan Lokal Persisten: Menggunakan database SQLite lokal (Room Database) untuk menyimpan riwayat seluruh perangkat yang pernah terdeteksi agar tidak hilang saat aplikasi ditutup.
  • Waktu Relatif: Menampilkan waktu penemuan dalam format ramah pengguna ("Baru saja", "3 menit lalu", "Kemarin").
  • Aksi Track Again (Icon-Only): Tombol melingkar 36dp beraksen Electric Blue untuk langsung membuka Radar View dan melanjutkan pelacakan perangkat.
  • Pencarian Riwayat: Dilengkapi search bar full-pill 44dp dengan animasi snap scroll.
  • Manajemen Riwayat: Opsi hapus item individual dan dialog konfirmasi Hapus Semua Riwayat yang konsisten dengan desain sistem aplikasi.

4. Navigasi & Pengalaman Pengguna (UX)

  • Interactive Tactical Splash Screen: Transisi pembuka dengan radar canvas 360Β°, efek gelombang konsentris, logo radar taktis, pill status beacon, dan indikator versi dinamis.
  • Non-Looping Navigation: Navigasi bottom bar berakar pada Scanner (popUpTo(NavScreen.Scanner)). Berpindah tab berulang kali tidak menumpuk backstack, dan menekan tombol Back saat berada di Scanner langsung menutup aplikasi (finish to launcher).
  • Konsistensi Modal Dialog: Dialog ganti nama perangkat (RenameDeviceDialog) dan dialog hapus seluruh riwayat (ClearHistoryDialog) menggunakan arsitektur Material 3 AlertDialog standar, tombol aksi TextButton ("Batal" & "Simpan"/"Hapus Semua"), dan kontainer DarkSurface yang seragam.

5. Error Handling, Permissions, & Resilience

  • Prioritas Alur Izin & Bluetooth:
    • Jika izin belum diberikan (!hasPermissions), banner "Izin Diperlukan" dengan tombol "Berikan Izin" muncul pertama untuk meminta izin runtime Android.
    • Setelah izin disetujui, jika Bluetooth mati (!isBluetoothEnabled), banner otomatis berganti ke "Bluetooth Nonaktif" dengan tombol "Nyalakan".
    • Mencegah terjadinya SecurityException pada Android 12+ (API 31+) akibat pemanggilan intent Bluetooth sebelum izin BLUETOOTH_CONNECT disetujui.
  • Bluetooth State Monitor: Menggunakan BroadcastReceiver untuk memantau sakelar Bluetooth fisik secara real-time.
  • Lifecycle-Aware Scanning (PRD 4.3): Terintegrasi dengan DefaultLifecycleObserver. Pemindaian otomatis di-Pause saat aplikasi masuk ke latar belakang (background / onStop) guna menghemat baterai, dan otomatis di-Resume saat aplikasi dibuka kembali (foreground / onResume).

🎨 Desain Sistem & Dokumentasi Tambahan

Untuk dokumentasi arsitektur dan sistem visual yang mendalam, silakan merujuk pada dokumen khusus berikut:

  • πŸ“˜ DESIGN.md: Dokumentasi lengkap sistem desain Tactical Dark Minimalist, token warna 6-zona PRD, tipografi, komponen borderless, micro-motion, dan Haptic Proximity Engine.
  • 🧠 GEMINI.md: Playbook konfigurasi menyeluruh, detail lingkungan Android 17 (SDK 37), toolchain Gradle 9.1.0, arsitektur Clean/MVVM, dan catatan evolusi dari v1.0.0 hingga v1.0.6.

πŸ› Arsitektur & Pola Desain

Aplikasi dibangun menggunakan prinsip Clean Architecture dan MVVM (Model-View-ViewModel) dengan pemisahan dependensi secara ketat:

                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚           PRESENTATION LAYER            β”‚
                  β”‚   Jetpack Compose UI  β€’  ViewModels     β”‚
                  β”‚   (ScannerScreen, RadarScreen, History) β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                       β”‚ (StateFlow)
                                       β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚              DOMAIN LAYER               β”‚
                  β”‚   Use Cases  β€’  Models  β€’  Repository   β”‚
                  β”‚   (StartScan, StopScan, TrackDevice)    β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                       β”‚
                                       β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚               DATA LAYER                β”‚
                  β”‚  BleDeviceRepositoryImpl                β”‚
                  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
                  β”‚  β”‚ Native & Mock    β”‚ β”‚ Room Database β”‚ β”‚
                  β”‚  β”‚ BLE Scanner Flow β”‚ β”‚ (DeviceDao)   β”‚ β”‚
                  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Mengapa Arsitektur Ini Dipilih?

  1. Clean Architecture: Memisahkan logika bisnis (Domain) dari detail implementasi Android (BLE hardware, Room SQLite, dan Compose UI). Mempermudah pembuatan Unit Tests tanpa ketergantungan pada Android OS mocks.
  2. High-Throughput StateFlow Buffer: Paket periklanan BLE di dunia nyata dapat masuk puluhan kali per detik (high burst rate). Menulis setiap paket langsung ke SQLite Room akan menyebabkan I/O churn dan penurunan frame rate (jank). Repository menggunakan in-memory cache StateFlow untuk UI 60fps, dikombinasikan dengan debounced background flusher (2 detik) ke Room DB.
  3. Dependency Injection dengan Dagger Hilt: Standar resmi Google Android yang menjamin loose coupling, mempermudah mock injection saat pengujian, dan mengelola lifecycle dependensi secara otomatis.

πŸ“ Model Matematika & Pemetaan Jarak PRD

1. Log-Distance Path Loss Model

Kekuatan sinyal BLE berbanding terbalik secara logaritmik terhadap jarak fisik. Estimasi jarak dihitung menggunakan formula propagasi radio:

$$d = 10^{\frac{\text{TxPower} - \text{RSSI}}{10 \cdot n}}$$

  • $\text{TxPower}$: Kekuatan sinyal acuan pada jarak 1 meter (default terkalibrasi: $-59\text{ dBm}$).
  • $\text{RSSI}$: Nilai kekuatan sinyal yang diterima perangkat (dBm).
  • $n$: Eksponen rugi jalur lingkungan (path loss exponent, default ruangan indoor: $2.0$).

2. Exponential Moving Average (EMA) Low-Pass Filter

Sinyal radio BLE di dunia nyata sangat rentan terhadap multipath fading, pantulan dinding, dan interferensi frekuensi 2.4 GHz, yang menghasilkan fluktuasi noise $\pm 10\text{--}15\text{ dBm}$.
Untuk menjaga agar jarum radar dan grafik sparkline tidak berkedip-kedip secara agresif (jitter), kami menerapkan filter penghalus frekuensi rendah:

$$S_t = \alpha \cdot Y_t + (1 - \alpha) \cdot S_{t-1}$$

Dengan faktor bobot $\alpha = 0.35$, filter memberikan keseimbangan optimal antara stabilitas pembacaan dan ketanggapan terhadap perpindahan fisik pengguna.

3. Pemetaan 6 Kategori Sinyal PRD (Section 2.3)

Estimasi jarak dikelompokkan secara ketat mengikuti tabel spesifikasi PRD:

Nilai RSSI (dBm) Kategori Sinyal Perkiraan Jarak (Meter) Aksen Visual
$-10\text{ s/d }-30\text{ dBm}$ Sangat Kuat (Sangat Dekat) $&lt; 1\text{ meter}$ Emerald Green (#10B981)
$-30\text{ s/d }-50\text{ dBm}$ Kuat (Dekat) $1\text{ -- }3\text{ meter}$ Spring Green (#22C55E)
$-50\text{ s/d }-70\text{ dBm}$ Cukup / Baik $3\text{ -- }10\text{ meter}$ Amber Gold (#F59E0B)
$-70\text{ s/d }-80\text{ dBm}$ Lemah $10\text{ -- }20\text{ meter}$ Orange (#F97316)
$-80\text{ s/d }-90\text{ dBm}$ Sangat Lemah / Putus-putus $&gt; 20\text{ meter}$ (Batas jangkauan) Rose Red (#EF4444)
$&lt;-90\text{ dBm}$ Sinyal Hilang (Lost) Terputus / Di luar jangkauan Muted Slate (#94A3B8)

πŸ“ Struktur Proyek

com.anantyan.pulseble/
β”œβ”€β”€ core/
β”‚   └── DistanceCalculator.kt           # Log-distance path loss, EMA filter, & PRD mapping
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ ble/
β”‚   β”‚   β”œβ”€β”€ BleScanResult.kt            # Raw scan packet model
β”‚   β”‚   β”œβ”€β”€ BleScannerDataSource.kt     # Data source interface
β”‚   β”‚   └── NativeBleScannerDataSource.kt # BluetoothLeScanner + callbackFlow
β”‚   β”œβ”€β”€ mock/
β”‚   β”‚   └── MockBleScannerDataSource.kt # Realistic beacon generator for emulator
β”‚   β”œβ”€β”€ local/
β”‚   β”‚   β”œβ”€β”€ PulseBleDatabase.kt         # Room Database
β”‚   β”‚   β”œβ”€β”€ dao/DeviceDao.kt            # Room DAO (CRUD & flow queries)
β”‚   β”‚   β”œβ”€β”€ entity/DeviceEntity.kt      # Room entity
β”‚   β”‚   └── mapper/DeviceMapper.kt      # Domain <-> Entity mapper
β”‚   └── repository/
β”‚       └── BleDeviceRepositoryImpl.kt  # StateFlow cache + debounced Room persistence
β”œβ”€β”€ di/
β”‚   β”œβ”€β”€ BleModule.kt                    # Hilt binding for repository
β”‚   └── DatabaseModule.kt               # Hilt provider for Room DB & DAO
β”œβ”€β”€ domain/
β”‚   β”œβ”€β”€ model/
β”‚   β”‚   β”œβ”€β”€ BleDevice.kt                # Rich domain model with RSSI history
β”‚   β”‚   └── ProximityZone.kt            # 6 PRD Proximity Zones enum
β”‚   β”œβ”€β”€ repository/
β”‚   β”‚   └── BleDeviceRepository.kt      # Repository contract
β”‚   └── usecase/
β”‚       └── ScanUseCases.kt             # Domain Use Cases
└── presentation/
    β”œβ”€β”€ MainActivity.kt                 # Lifecycle observer, permissions, & bluetooth receivers
    β”œβ”€β”€ components/
    β”‚   β”œβ”€β”€ BleDeviceCard.kt            # Tactical card with signal bars
    β”‚   β”œβ”€β”€ ConcentricRadarCanvas.kt    # Sweeping radar canvas & blip pulse
    β”‚   β”œβ”€β”€ HapticProximityEngine.kt    # Tactile proximity vibration
    β”‚   β”œβ”€β”€ RenameDeviceDialog.kt       # Consistent M3 device rename dialog
    β”‚   β”œβ”€β”€ RssiSparklineChart.kt       # Real-time RSSI stability sparkline
    β”‚   β”œβ”€β”€ SignalBadge.kt              # Dynamic PRD zone badge
    β”‚   └── StatusBanner.kt             # Bluetooth & permission recovery banner
    β”œβ”€β”€ navigation/
    β”‚   β”œβ”€β”€ NavScreen.kt                # Routes & bottom nav items
    β”‚   └── PulseNavHost.kt             # Anti-looping single-top Jetpack Navigation
    β”œβ”€β”€ splash/
    β”‚   └── SplashScreen.kt             # Interactive radar splash screen & version display
    β”œβ”€β”€ scanner/
    β”‚   β”œβ”€β”€ ScannerScreen.kt            # Dashboard Scanner UI with pill search & circular filter
    β”‚   β”œβ”€β”€ ScannerUiState.kt           # MVI/MVVM UI state
    β”‚   └── ScannerViewModel.kt         # Search, RSSI slider filter, & sorting logic
    β”œβ”€β”€ radar/
    β”‚   β”œβ”€β”€ RadarScreen.kt              # Detail Pelacakan (Radar View) UI
    β”‚   β”œβ”€β”€ RadarUiState.kt             # Radar UI state
    β”‚   └── RadarViewModel.kt           # Target tracking, Hz rate, & stability logic
    β”œβ”€β”€ history/
    β”‚   β”œβ”€β”€ HistoryScreen.kt            # History Log UI with 36dp track action & pill search
    β”‚   β”œβ”€β”€ HistoryUiState.kt           # History UI state
    β”‚   └── HistoryViewModel.kt         # Room history query & clear logic
    └── theme/
        β”œβ”€β”€ Color.kt                    # Tactical dark & PRD signal colors
        β”œβ”€β”€ Theme.kt                    # Material 3 Edge-to-Edge Theme
        └── Type.kt                     # Typography tokens

πŸ›  Teknologi & Versi Library

Library / Komponen Versi Peran & Alasan Pemilihan
Android Application compileSdk = 37
targetSdk = 37
minSdk = 24
Mendukung Android modern (Android 14–17 / SDK 37) hingga kompatibilitas minimum Android 7.0 Nougat.
App Version versionCode = 6
versionName = "1.0.6"
Versi aplikasi stabil dengan integrasi BuildConfig dinamis.
Android Gradle Plugin (AGP) 9.0.1 Sistem build mutakhir Android Studio.
Gradle Wrapper 9.1.0 Build orchestration berbasis declarative performance.
Kotlin 2.3.20 Bahasa pemrograman utama dengan dukungan Coroutines & Flows kelas satu.
KSP (Kotlin Symbol Processing) 2.3.12 Pengganti modern apt/kapt untuk kompilasi Room & Hilt hingga 2x lebih cepat.
Jetpack Compose BOM 2024.12.01 Bill of Materials resmi Google untuk konsistensi seluruh modul UI Compose.
Compose Material 3 BOM 2024.12.01 Desain antarmuka modern dengan token warna dinamis dan dark mode taktis.
Jetpack Navigation Compose 2.8.9 Manajemen navigasi deklaratif antar layar dengan parameter transfer tipe aman.
Dagger Hilt 2.60.1 Dependency Injection standar industri dengan integrasi lifecycle Jetpack.
Hilt Navigation Compose 1.2.0 Integrasi scoping ViewModel otomatis terhadap Navigation BackStackEntry.
Room Database 2.7.2 Abstraksi SQLite tipe aman resmi Google untuk persistence lokal riwayat perangkat.
AndroidX Core KTX 1.15.0 Ekstensi Kotlin idiomatik untuk fungsionalitas inti platform Android.
AndroidX Lifecycle & ViewModels 2.8.7 Manajemen state reaktif StateFlow dan siklus hidup DefaultLifecycleObserver.
AndroidX Activity Compose 1.10.1 Integrasi enableEdgeToEdge() dan BackHandler responsif.
Kotlinx Coroutines & Flow 1.10.2 Pengelolaan background threading reaktif untuk streaming data BLE tanpa blocking UI thread.
Turbine & JUnit4 1.2.1 / 4.13.2 Pengujian reaktif untuk state flow dan unit test matematika.

πŸš€ Instruksi Setup & Menjalankan Aplikasi

Kebutuhan Sistem:

  • Android Studio: Ladybug / Meerkat (atau versi terbaru).
  • JDK: Java 17 atau 21.
  • Android SDK: compileSdk = 37, targetSdk = 37, minSdk = 24, buildTools = 37.0.0.

Langkah-langkah:

  1. Clone Repository:
    git clone https://github.com/anantyan/PulseBLE.git
    cd PulseBLE
  2. Buka di Android Studio: Buka direktori proyek PulseBLE di Android Studio dan biarkan Gradle menyelesaikan sync dependencies.
  3. Jalankan Unit Tests:
    ./gradlew testDebugUnitTest
    Seluruh unit test matematika (DistanceCalculatorTest), mapper (DeviceMapperTest), repository (BleDeviceRepositoryTest), dan viewmodel (ScannerViewModelTest) akan dieksekusi secara otomatis.
  4. Build Debug APK:
    ./gradlew assembleDebug
    File APK siap diuji akan dihasilkan pada: app/build/outputs/apk/debug/app-debug.apk.
  5. Jalankan di Perangkat: Pilih target perangkat (HP Android fisik atau Emulator) lalu klik tombol Run (Shift + F10).

πŸ“‘ Hardware & E2E Validation

Aplikasi telah divalidasi penuh secara end-to-end langsung pada perangkat keras fisik Xiaomi POCO (Android 16 / API 36) via wireless ADB debugging:

Test Case Deskripsi Pengujian Hasil Pengujian
TC-1 Runtime Permissions Permintaan izin BLE Scan & Connect (Android 12–16) secara bertahap sebelum aktivasi hardware Bluetooth. LULUS
TC-2 BLE Discovery Pemindaian periklanan real-time dari puluhan perangkat fisik (TWS, smartwatch, laptop), pengurutan RSSI descending, search bar pill 44dp, dan filter slider. LULUS
TC-3 Detail & Signal Gauge Akurasi kalkulasi jarak log-distance path loss, EMA smoothing, dan pergantian nama alias kustom perangkat. LULUS
TC-4 Tactical Radar Canvas Animasi sweep radar 360Β°, penanda blip berdenyut, sparkline riwayat RSSI, dan haptic proximity ping. LULUS
TC-5 Room Database Persistence Penyimpanan lokal SQLite, query pencarian riwayat, aksi track-again 36dp, hapus riwayat individual, dan hapus seluruh riwayat dengan dialog konsisten. LULUS
TC-6 Lifecycle & Battery Safety Penghentian pemindaian otomatis di latar belakang (onStop) untuk menghemat baterai (zero background drain), pemulihan otomatis saat resume, dan anti backstack looping pada tombol Back. LULUS

⚠️ Asumsi Teknis & Batasan (Known Issues)

  1. Akurasi RSSI di Lingkungan Fisik:
    • Keterbatasan: Sinyal Bluetooth 2.4 GHz dipengaruhi oleh absorpsi tubuh manusia, dinding beton, dan interferensi Wi-Fi. Oleh karena itu, estimasi jarak berbasis RSSI merupakan pendekatan (approximation), bukan posisi absolut berbasis Ultra-Wideband (UWB).
    • Solusi: Kami menerapkan EMA Low-Pass Filter ($\alpha = 0.35$) dan mengelompokkannya ke dalam 6 zona rentang diskrit sesuai PRD untuk memberikan pembacaan yang stabil dan bermakna bagi pengguna.
  2. Prioritas Izin Android 12+ vs Android Lawas:
    • Keterbatasan: Pada Android 12+ (API 31+), menyalakan Bluetooth atau memindai tanpa izin BLUETOOTH_CONNECT dan BLUETOOTH_SCAN akan melempar SecurityException.
    • Solusi: Banner status mengutamakan tombol "Berikan Izin" terlebih dahulu, baru kemudian mengarahkan pengguna ke tombol "Nyalakan Bluetooth".
  3. OS Throttling pada Background Scanning:
    • Keterbatasan: Android OS membatasi pemindaian BLE tanpa henti di background untuk mencegah boros baterai.
    • Solusi: Mengikuti best-practice Android modern dan poin PRD 4.3, aplikasi mem-pause pemindaian saat aplikasi di-minimize dan menyambungnya kembali secara otomatis saat aplikasi kembali ke layar depan.

πŸ“¦ Build Artifact & GitHub Releases

Build artifact APK debug versi terbaru telah dikompilasi dan dapat diunduh langsung:

  • Versi Rilis: v1.0.6
  • Kode Versi: versionCode 6, versionName "1.0.6" (SDK 37 Target & Compile)
  • Unduh APK: GitHub Releases β€” PulseBLE Latest Debug APK
  • Path Lokal: app/build/outputs/apk/debug/app-debug.apk
  • Application ID: com.anantyan.pulseble

Dibuat dengan dedikasi tinggi terhadap kualitas kode, arsitektur bersih, performa tinggi, dan pengalaman pengguna interaktif.

About

PulseBLE - Real-Time BLE Scanner, Proximity Radar & Device Tracker for Android (Jetpack Compose, Room, Hilt)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages