V aplikacích pro Android je nutné nabídnout uživatelům různé možnosti interakce s obsahem, což může zahrnovat i využívání kontextových a vyskakovacích nabídek. Tato funkčnost umožňuje efektivní a intuitivní správu akcí, které se vztahují k určitému obsahu na obrazovce. Kontextové nabídky (Contextual Action Bar, CAB) a vyskakovací nabídky (PopupMenu) jsou dvě běžné metody, jak uživatelům poskytovat další možnosti interakce s objekty na obrazovce, aniž by bylo nutné přetížení hlavní uživatelské rozhraní.

Při práci s kontextovými nabídkami v Androidu je klíčovým prvkem použití MultiChoiceModeListener, který umožňuje provádět operace na více položkách najednou. K tomu je třeba nastavit seznam, který podporuje více výběrů a přidat metodu setMultiChoiceModeListener(). Tento posluchač, jak již název napovídá, je zodpovědný za zpracování akcí vybraných položek, například přesun, smazání nebo jinou interakci. V případě kontextových nabídek je nezbytné také nastavení CHOICE_MODE_MULTIPLE_MODAL, což způsobí, že uživatel může vybírat více položek současně. Bez toho by aplikace neumožnila víceúrovňovou interakci s více položkami.

U implementace kontextového akčního baru (CAB) je možné, že nebudete potřebovat Action Bar. V takovém případě je tento kontextový akční bar vykreslen přímo nad obsahem aplikace a bude se chovat jako součást rozhraní. V případě, že máte Action Bar, tento se při spuštění CAB přemístí nad něj. Celý tento mechanismus je možné přizpůsobit dle potřeby pomocí změny vzhledu aktivit a layoutu. Je důležité si uvědomit, že akční režim je standardně aktivován dlouhým stisknutím na položku v seznamu. Aby byla funkcionalita co nejvíce přístupná, je možné ji aktivovat i při běžném kliknutí na položku, čímž se stává intuitivnější pro uživatele, kteří nevyužívají dlouhý stisk.

Další metodou interakce s uživatelem je vyskakovací nabídka (PopupMenu), která se obvykle používá v případech, kdy je třeba uživateli nabídnout několik dalších možností, aniž by byl přetížen hlavní obrazovka. Příkladem takové nabídky je tlačítko „Odpovědět“ v e-mailové aplikaci, kde po kliknutí uživatel vidí možnosti jako „Odpovědět“, „Odpovědět všem“ nebo „Přeposlat“. Vyskakovací nabídky jsou vždy vykresleny pod nebo nad tlačítkem, které je aktivovalo, v závislosti na dostupném prostoru na obrazovce. Tento typ nabídky nenarušuje zobrazení samotného tlačítka, což je rozdíl oproti kontextovým nabídkám, které obvykle ovlivňují přímo položky v seznamu nebo jiný obsah.

K vytvoření vyskakovací nabídky je potřeba definovat XML soubor, který bude obsahovat seznam položek, a následně tento soubor načíst při interakci s odpovídajícím tlačítkem. Po načtení nabídky se přidá posluchač pro kliknutí na položky nabídky, který provádí požadovanou akci (například odeslání odpovědi na e-mail). Taková nabídka je rychlým způsobem, jak přidat interaktivní funkce do aplikace bez nutnosti přetěžovat hlavní uživatelské rozhraní.

Oba typy nabídek, kontextová akční nabídka a vyskakovací nabídka, mají svá specifika a jsou určeny pro různé scénáře použití. Správné pochopení jejich rozdílů a účelu umožňuje efektivní použití v aplikacích, což přispívá k zajištění konzistentní a intuitivní uživatelské zkušenosti. Vhodné nasazení kontextového režimu a vyskakovacích nabídek je zásadní pro zjednodušení navigace v aplikaci, čímž se minimalizuje potřeba procházet dlouhé seznamy možností nebo používat složitější rozhraní.

Endtext

Jak odesílat a přijímat SMS zprávy v Androidu: Komplexní průvodce

Vytváření aplikací, které komunikují prostřednictvím SMS zpráv, může být jednoduché, ale zároveň vyžaduje správné nastavení oprávnění a zpracování různých scénářů odesílání a přijímání zpráv. S příchodem Android 6.0 (API 23), který přinesl změny v modelu oprávnění, je nutné věnovat více pozornosti správné konfiguraci, aby aplikace fungovala bez problémů.

Odesílání SMS zpráv

Metoda sendTextMessage() se používá pro skutečné odesílání zpráv. I když se na první pohled může zdát, že vše, co je třeba udělat, je zavolat tuto metodu s adresou a textem zprávy, realita je o něco složitější. Od verze Android 6.0 je nutné získat explicitní oprávnění k odesílání SMS zpráv. K tomu se využívá SMSManager, který poskytuje metody pro odesílání zpráv a kontrolu stavu odeslání.

Nejčastějším omezením při odesílání SMS zpráv je maximální délka textu, která činí obvykle 160 znaků. Pokud text přesahuje tuto délku, je nutné použít metodu divideMessage(), která rozdělí zprávu na více částí a pošle je prostřednictvím sendMultipartTextMessage(). V tomto případě však musíte být opatrní při testování, protože emulátory nemusí správně zpracovávat rozdělené zprávy. Je tedy doporučeno testovat na skutečném zařízení.

Pokud chcete sledovat stav odesílání zprávy, můžete využít volitelné parametry pro notifikace o odeslání nebo doručení zprávy. V takovém případě je nutné použít objekty typu PendingIntent, které vám umožní obdržet notifikaci o výsledku odeslání nebo doručení zprávy, jako je úspěch (Activity.RESULT_OK) nebo chyba (např. RESULT_ERROR_GENERIC_FAILURE).

Příjem SMS zpráv

Přijímání SMS zpráv je o něco složitější, než pouhé odesílání. Aplikace musí mít správně nastavený BroadcastReceiver, který bude reagovat na přijaté SMS zprávy. Tento přijímač bude informovat aplikaci o příchozí zprávě a umožní ji zpracovat, i když aplikace není aktivní.

Pro příjem SMS zpráv je nezbytné, aby aplikace získala oprávnění k přijímání SMS (Manifest.permission.RECEIVE_SMS). Tento krok je důležitý zejména na zařízeních s Androidem 6.0 a novějšími, kde oprávnění není uděleno automaticky, ale je třeba ho explicitně požádat uživatele.

Přijaté SMS zprávy jsou odesílány jako Intent v systému Android, kde se používá metoda onReceive() v rámci BroadcastReceiver pro jejich zpracování. PDU (Protocol Data Unit) obsahuje binární data zprávy, která je třeba správně dekódovat do formátu, který je pro aplikaci čitelný. Tento proces je automatizován v knihovně SmsMessage, která umožňuje snadné vytváření objektů zpráv z PDU dat.

Pokud vaše aplikace neobdrží příchozí SMS zprávy, může to být způsobeno blokováním jinou aplikací, která má vyšší prioritu. V takovém případě můžete zkusit zvýšit prioritu Intent nebo dočasně zakázat jiné aplikace, které mohou tento proces ovlivňovat.

Čtení existujících SMS zpráv

Čtení již přijatých SMS zpráv vyžaduje přístup k SMS Content Provideru v systému Android. Pro tento účel je nutné získat oprávnění k čtení SMS zpráv a následně použít ContentResolver k dotazování na databázi SMS zpráv.

Pomocí Uri.parse("content://sms/") lze získat přístup k datům odeslaných a přijatých zpráv, které jsou uložené v interní databázi systému. S tímto přístupem můžete získat různé informace, jako je telefonní číslo odesílatele, obsah zprávy a další metadaty spojené se zprávami, jako je čas přijetí nebo typ protokolu.

Je důležité si být vědom toho, že obsah SMS zpráv může být citlivý, a proto je třeba zajistit odpovídající ochranu soukromí uživatele. Pokud aplikace čte SMS zprávy, měla by být zajištěna transparentnost vůči uživateli a jasně uvedeno, proč a jak jsou zprávy čteny.


Důležité je si uvědomit, že práce s SMS zprávami v Androidu vyžaduje správné nastavení oprávnění pro každou z těchto operací. Bez nich může aplikace selhat nebo přestat správně fungovat, což je obzvlášť důležité po změnách v Android 6.0 a novějších verzích. Také je nutné vždy testovat aplikaci na reálných zařízeních, protože emulátory nemusí vždy přesně napodobovat chování zařízení v reálných podmínkách.