Android: Cleartext HTTP traffic to downloads.bbc.co.uk not permitted

Od Android 8 (Oreo) je defaultně zakázáno komunikovat po http – je nutné komunikovat po https. Pokud stahujete data ze zdroje, kde nemůžete ovlivnit nasazení https, lze toto pravidlo obejít přidáním níže uvedeného kódu do vaší aplikace.

Vytvoříme soubor: res/xml/network_security_config.xml

Do AndroidManifest.xm přidáme řádek: http://android:networkSecurityConfig=”@xml/network_security_config”

 

Retrofit: synchronní a asynchronní požadavky

Minule jsme si ukázali, jak použít Retrofit v Android studiu. Dnes se podíváme na synchronní a asynchronní požadavky.

Synchronní požadavek

Při synchronním požadavku, je na server odeslán požadavek, aplikace se “zastaví” a čeká, dokud neobdrží odpověď od serveru.

Asynchronní požadavek

Při asynchronním požadavku se používají tzv. callbacky. Na server se odešle požadavek (stejně jako při synchronním požadavku) ale nečeká se na odpověď a kód pokračuje dál. Na odpověď ze serveru čeká callback, který provede požadovanou operaci s odpovědí od serveru. Tento callback se může zavolat kdykoliv (odpověď od serveru trvá různě dlouho).

V kódu je vidět asynchronní volání, které je shodné jako v prvním seznámení s Retrofit, přibylo synchronní volání:

 

 

Android se nepřipojuje k WiFi síti bez internetu

Android od verze KitKat (4.4) se automaticky nepřipojuje k WiFi sítím, u kterých nezjistí dostupnost internetu. Asi to dává smysl, proč by se pojil k síti, která nemá internet? Raději zkusí jinou síť kde internet bude. Ale jak to vyřešit pokud chceme aby s k této síti připojoval? Uděláme malý hack, kterým nasimulujeme servery, na kterých Android zjišťuje, že je na internetu 🙂 Android po připojení zkontroluje URL (je natvrdo zadrátovaná v Androidu a může se měnit v závislosti na verzi Androidu). Pokud dostane zpět požadovanou odpověď, považuje WiFi síť za připojenou k internetu (i když internet nemá) 🙂

Požadavky na danou adresu jsou klasickým GETem a zařízení požaduje odpověď 204 (No content) to je celé. Jenže jak si tyto servery nasimulovat?

Nejjednodušší je v DNS překládat URL (clients3.google.com a connectivitycheck.gstatic.com) na náš server, kde spustíme nginx s touto konfigurací:

 

Raspberry Pi a meteostanice WH1090

Když jsem byl malý, chtěl jsem mít žábu ve sklenici, která mi bude předpovídat počasí. No dobře, mezitím jsem trochu vyrostl a přišel na to, že by mi stejně chcípla 🙂 Místo toho jsem si pořídil meteostanici WH1090, která sice zatím počasí nepředpovídá ale několik let vcelku spolehlivě měří meteorologické veličiny. Meteostanice umí pouze zobrazovat meteorogické veličiny na displeji. Tento displej má USB konektor. K meteostanici jsem tedy připojil Raspberry Pi, na něj nainstaloval Raspbian, přes který získávám data z meteostanice a odesílám na svůj server, kde je ukládám a zobrazuji grafy.

Celou komunikaci s meteostanicí zajišťuje Pywws. Pywws je kolekce Python modulů pro práci s daty z meteostanic: WH1090, WH1080, WH1081, … Byl vyvinut pro spuštění v zařízení s malou spotřebou energie, typicky Raspberry Pi.

Instalace

Pojďme na Raspbian nainstalovat Python a do něj kód pywws, který nám usnadní získávání dat z meteostanice. Pro instalaci budete potřebovat Python 2.5 a novější. Python 3 je částečně podporován, některé funkce závisí na knihovnách, které ještě nebyly portovány do Pythonu 3.

V domovské složce vytvoříme složku weather do které nainstalujeme pywws pro získávání dat z meteostanice:

nainstalujeme kód pro meteostanici:

aktualizujeme pywws

Test spojení s meteostanicí

čímž bychom měli získat výstup podobný tomuto:

Juchúúúú 🙂

Jak odeslat data z meteostanice na server

Tímto kódem odesílám data každých 5 minit na server, kde je ukládám do MySQL databáze.

 

Android: zpřístupnění nově vytvořeného souboru přes USB v počítači

Řeším zajímavý úkol: vytvoř v Android zařízení soubor, který bude po připojení telefonu k PC vidět v PC a bude možné jej překopírovat z telefonu do PC.

Dejte si pozor, protože od Android 5 musíte jednotlivá oprávnění povolovat na vyžádání, my budeme potřebovat oprávnění pro ukládání na úložiště. Pro jednoduchost vynechám kód nutný pro získání oprávnění zápisu do úložiště.

Do AndroidManifext.xml přidáme oprávnění:

A jdeme na zdrojový kód (nezapomeňte kontrolovat oprávnění zápisu na úložiště – od SDK Android 5!):

Nejdůležitější příkaz je:

Tímto příkazem se soubor zviditelní mezi ostatními soubory a bude možné ho překopírovat do počítače

Debian 9 (stretch) – instalace php 7.1

V poslední verzi Debianu Stretch je defaultně php 7.0, pokud potřebujete novější 7.1, je možné jej bez kompilace zdrojových kódů nainstalovat přes balíčky:

Bower + Grunt + Colorbox

Dnes vám naznačím jak do projektů přidávám knihovny třetích stran  a jak spojuji css a js soubory, které následně minifukuji. Ukážeme se to na pluginu Colorbox který používám pro zobrazení detailu fotek v pop-up okně.

Nainstalujeme Colorbox přes bower:

Grunt task pro Colorbox

Pro zkopírování souborů používám balíček grunt-contrib-copy a pro minifikaci css do jednoho souboru grunt-contrib-cssmin:

Nejdůležitější část souboru Gruntfile.js:

Tím se nakopírují ohrají obrázky obrázky z ./bower_components/jquery-colorbox/example3/images/ do www/css/image, soubor bower_components/jquery-colorbox/example3/colorbox.css se zmnifikuje a připojí k souboru www/css/main.css a soubor bower_components/jquery-colorbox/jquery.colorbox-min.js připojíme k zminifikovanému souboru www/js/compiled.min.js

Do souboru s JS přidáme inicializaci Colorboxu (v mém případě main.js):

Parametr {rel:’gal’} označuje že se jedná o galerii. Pokud bude více odkazů s class=”colorbox” půjde mezi fotkami přepínat a nebude se muset pop-up okno zavírat.

Odkazu s obrázkem přidáme classu colorbox:

A je to 🙂

Android: jak na responzivní zobrazení komponent na celou výšku displeje

Pokud budete chtít zobrazit komponenty rovnoměrně na celou výšku displeje, můžete využít ConstraintLayout. Jedná se o nový layout, který je dostupný v Android Studiu. Nezapomeňte ošetřit malé displeje, aby se komponenty na displej vešly.

constraint-layout

Kód pro inspiraci:

 

WordPress jak na shortcode

Namotivován ze včerejší WPkonference sedám ke stroji a jdu vylepšit můj plugin pro fotogalerii rajče. Plugin nyní zobrazuje naposledy vytvořené galerie s úvodní fotkou. Rozhodl jsem se použít shortcode pro zobrazení celé galerie.

Shortcode je příkaz který na svém místě zavolá funkci a zobrazí html kód. Například následující shortcode by zobrazil fotogalerii [forogalerie]. Shortcode můžeme používat ve stránce i příspěvku.

Jak použít shortcode

Pro zpracování takto definovaného shorcode:

Použijeme nejjednodušší metodu:

Příkazem add_shorcode definujeme nový shortcode. První parametr označuje název shortoce ( [rajce-galerie … ) a druhý parametr je název funkce, která se zavolá pro tento shortcode.

Ve funkci si můžeme sáhnout na parametry uvedené u shortcode, kde definujeme defaultní hodnotu, pokud parametr není uveden. V mím případě NULL:

Pak už si s parametry můžeme dělat co chceme 🙂