Tipy pro Android: Jak trackovat polohu na pozadí a nenechat se zabít?
23. listopadu 2020
Trackování polohy na pozadí jsme v Dactylu řešili u několika aplikací. A protože řešení není vždycky úplně jednoduché, připravili jsme pár tipů, které se nám osvědčily v praxi. Pojďme na ně.
Řešení pro nárazové trackování: WorkManager
Poloha na pozadí může být zaznamenávána více způsoby. Pokud je potřeba pouze nárazově, vyplatí se použít např. WorkManager, kterému můžete nastavit různá kritéria vykonání od periody po nutnost být připojený k internetu/energii. Nevýhodou může být minimální perioda 15 minut. Při neustálé potřebě něco vykonávat budete muset sáhnout po procesu na pozadí – Service.
Chce to flexibilnější řešení
Základní kámen pro úspěšný běh procesu na pozadí je Foreground Service. Jedná se o typ služby s nejvyšší prioritou, u které je nejnižší pravděpodobnost, že bude ukončena samotným systémem. Uživatele informuje o běhu připnutá notifikace. Od API 26 je nastavená pro běh na pozadí vyšší restrikce, kdy se klasické služby na pozadí ukončí po několika desítkách sekund běhu.
Podpora tohoto typu služby přišla také až od API 26 s příchozími restrikcemi. Při implementaci vlastní služby můžete příkazem ContextCompat.startForegroundService(context, serviceIntent) určit, jakým způsobem podle verze API službu spustit.
Ani špička pyramidy však nezaručí bezproblémový chod. Je vhodné implementovat vlastní detekci, zda byla aplikace ukončena neočekávaně (systémem), a při spuštění uživatele informovat, aby si v systému vypnul omezení běhu na pozadí.
Problematické značky a zařízení
Žebříček na webu Don't Kill My App informuje o značkách zařízení, kterých se tento problém týká nejvíc. Pokud se problém s ukončováním vyskytoval, uvolnění výkonnostních restrikcí aplikace v nastavení operačního systému ze strany uživatele ho posouvá téměř k dokonalosti.
Každý výrobce ukrývá nastavení restrikcí aplikace na jiném místě, proto je dobré pokrýt nejvíce problematické a rozšířené značky s postupy pro uživatele. My v Dactylu jsme měli největší problémy s Huawei, který i ve zmíněném žebříčku atakuje nejvyšší příčky.
Implementace
Při implementaci služby je potřeba přepsat několik metod. Jedna z nich je onStartCommand ,kde vrátíme jen hodnotu START_STICKY ,která pomůže restartovat službu při ukončení.
Pro samotný záznam polohy se nám osvědčilo použití třídy FusedLocationProviderClient místo poskytovatele dat čistě z GPS využitím LocationManageru. Díky kombinaci více poskytovatelů polohy bylo prvotní určení polohy mnohem rychlejší, poté stabilnější a přesnější.
Nastavení LocationRequestu pro zmíněný Provider nabízí několik parametrů. Provider poskytuje čtyři režimy, po jejich definováním bude distribuována lokace do callbacku onLocationResult.
Zajímavé řešení pro města
Ve městech byly zajímavé výsledky z úsporného PRIORITY_LOW_POWER, který pomocí používání pozic mobilních BTSek dokázal uspokojivě určovat polohu uživatele. Všechny režimy najdete v této dokumentaci.
Parametry interval a fastestInterval jsme definovali na stejné úrovni, definováním hodnoty Interval bez fastestInterval poskytoval systém horší dodržování nastavené periody.
Šetříme uživateli baterku
Spotřebu energie sníží implementace BroadcastReceiver, kde je možné při nastavení akcí BluetoothDevice.ACTION_ACL_CONNECTED nebo BluetoothDevice.ACTION_ACL_DISCONNECTED do implementovaného rozhraní provolat zprávu, že dané spárované zařízení bylo připojeno, a tím reagovat změnou nastavení poskytovatele pozic, nebo záznam teprve při této akci zapínat.
Kontrolní otázka, co jsou cookies? Vyberte správnou odpověď.
Cookies nejsou sušenky, ale textové soubory
Chceme mít přehled, jak to na našem webu žije. Vy ale máte ve své moci, kolik se toho o vaší zdejší návštěvě dozvíme.
Jako vývojáře webů a aplikací nás zajímají analytická data, budeme proto vděční za váš souhlas.
Nastavení cookies
Vyberte vámi preferované povolení cookie, přičemž základní jsou nezbytné pro fungování, jiné můžeme používat jen s vaším souhlasem.
Vaše osobní údaje budou zpracovány a informace z vašeho zařízení (soubory cookie, jidinečné identifikátory a další údaje zařízená) mohou být uchovávány.
Svůj názor můžete vždy změnit a souhlas odvolat pomocí odkazu v patičce tohoto webu. Pro více informací o používání cookies prosím naštivte tuto stránku.