Lekce 30 - Práce s bitmapou v Android a publikace na Google Play
V minulé lekci našeho Android kurzu, Poznámkový bloček pro Android - Info a dokončení, jsme dokončili poznámkový bloček s databází.
V dnešním tutoriálu se podíváme na práci s bitmapou a nakonec si
ukážeme jak publikovat naši hotovou aplikaci na Google Play
.
Další možnosti intentu a práce s bitmapou
V této krátké kapitolce si probereme další možnosti intentu, konkrétně vytáčení čísel a práci s bitmapou, abychom se naučili upravovat obrázky.
Využití systémových aktivit
Vaše aplikace může pomocí intentu zavolat systémovou aktivitu. Toho můžeme v našich aplikacích libovolně využívat.
Volání
Použití je velmi jednoduché. Na samotné zahájení volání nám stačí:
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(tel:730910860)));
Tento řádek vyvolá systémovou aktivitu pro hovory a předá ji zadané číslo. Tento postup je ovšem docela nekomfortní. Pokud chceme, aby vše proběhlo automaticky (uživatel nemusel 2x vytáčet hovor) a po ukončení hovoru proběhl návrat do původní aplikace, je třeba učinit nějaké úpravy. V praxi to poté bude vypadat následovně:
public void startCall(View v){ EditText zadani = (EditText) findViewById(R.id.editText); String cislo = zadani.getText().toString(); call(cislo); } private void call(String cislo){ String Call = "tel:"+cislo; startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(Call))); }
Toto řešení je již plně automatizováno, pro větší přehlednost je rozepsané do dvou metod. K aplikaci můžete přidat databázi kontaktů a máte plnohodnotnou aplikaci pro volání.

FastCall aplikace
Bitmap
Tímto příkladem si tedy ukážeme práci s obrázky.
Práce s kanály aRGB
Zkusme si na obrázek aplikovat červený filtr. Postupně pomocí dvou
cyklů procházíme celou bitmap
pixel po pixelu. Vždy vezmeme
jeden pixel, pomocí metody color.red
získáme hodnotu kanálu R a
ostatní dva kanály vynulujeme. První parametr ve funkci
Color.argb()
je průhlednost:
public void cervenyFiltr() { imw = (ImageView) findViewById(R.id.imv); Bitmap noMutableBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.obraz); /* Bitmap který vytváříme je immutable. To znamená, že s ním dále nemůžeme pracovat. Proto si v následujícím řádku vytváříme jeho kopii. Parametr true říká, že bitmap bude mutable. Bitmap bmp=noMutBmp.copy(Bitmap.Config.ARGB_8888, true); int wid = bmp.getWidth(); int hig =bmp.getHeight(); /* Získání šířky a výšky pro cykly. */ for (int i = 1; i <= wid - 1; i++) { for (int j = 1; j <= hig - 1; j++) { int pix = bmp.getPixel(i, j); int rd = Color.red(pix); int barva = Color.argb(0xff, rd, 0, 0); bmp.setPixel(i, j, barva); } } }
Kopírování
Prosté zkopírování bitmapy potom vypadá takto:
public void Kopiruj(View v) { imw = (ImageView) findViewById(R.id.imageView2); Bitmap noMutBmp = BitmapFactory.decodeResource(getResources(), R.drawable.bulik); bmp = noMutBmp.copy(Bitmap.Config.ARGB_8888, true); imw.setImageBitmap(bmp); }
Hledání a počítání pixelů
Pokud potřebujeme zjistit, kolikrát se v daném obrázku vyskytuje určitý pixel, mohly bychom to řešit například takto:
public void pocitej(View v) { try { int shoda = 0; int wid = bmp.getWidth(); int hig = bmp.getHeight(); EditText red = (EditText) findViewById(R.id.editText); EditText green = (EditText) findViewById(R.id.editText2); EditText blue = (EditText) findViewById(R.id.editText3); int redHodnota = Integer.parseInt(red.getText().toString()); int greenHodnota = Integer.parseInt(green.getText().toString()); int blueHodnota = Integer.parseInt(blue.getText().toString()); for (int i = 1; i <= wid - 1; i++) { for (int j = 1; j <= hig - 1; j++) { int pix = bmp.getPixel(i, j); int rd = Color.RED(pix); int gr = Color.GREEN(pix); int bl = Color.BLUE(pix); if (redHodnota == rd && greenHodnota == gr && blueHodnota == bl) shoda++; } } Toast.makeText(getApplicationContext(), "Zadaný pixel se zde vyskytuje " + shoda + "x", Toast.LENGTH_LONG).show(); } catch(Exception e) { Toast.makeText(getApplicationContext(), "Obrázek nebo hodnoty nejsou nastaveny.", Toast.LENGTH_LONG).show(); } }
Takto bychom mohli pokračovat dále. Není tedy moc těžké vytvořit si vlastní rastrový editor.

Práce s bitmapou
Google Play
Každý z nás jistě zná Google Play a ví, že jde o on-line platformu, na které se nachází různé aplikace určené k distribuci zdarma nebo za poplatek. Jedná se o nejrozšířenější způsob distribuce aplikací, počty stažení se počítají na desítky miliard. Google Play jako takový oficiálně vznikl 6. března 2012 sloučením Android Marketu a Google Music.
Nejčastěji zde najdeme aplikace pro chytré telefony a tablety. Konkrétně části Google Play, kde jsou ke stažení tyto aplikace, se říká Google Play Store.
Registrace účtu vývojáře
Jako první potřebujeme účet vývojáře. Zaregistrovat se můžeme na tomto odkazu: https://play.google.com/…lish/signup/
Jednorázový registrační poplatek je v současné době
25$
.
Nahrání APK
APK
- v horní části obrazovky máme nabídku Přidat novou aplikaci
- v rozbalovací nabídce vybereme výchozí jazyk a přidáme název aplikace
- vybereme možnost Nahrát soubor APK
Popis
Po nastavení jazyků, které v rámci naší aplikace podporujeme, musíme přidat podrobnosti o produktu (záložka záznam v obchodu):
Název
Název aplikace na Google Play.
Krátký popis
Zobrazuje se při prohlížení stránky s podrobnostmi o naší aplikaci. Maximální počet znaků je 80.
Úplný popis
V úplném popisu je limit 4000 znaků.
Grafické podklady a zařazení do kategorie
Musíme si připravit nějaké grafické podklady pro prezentaci naší aplikace. Nejlépe snímky přímo z mobilu, kde je aplikace nainstalovaná. Aby naše aplikace byla zařazena do seznamu "Vhodné pro tablety", musíme nahrát alespoň jeden snímek aplikace na 7" a 10" tabletu.
Cena a distribuce
Nyní přejdeme do záložky "Cena a distribuce", kde vybereme zacílení na určité země, zda je aplikace placená nebo zdarma, a pár dalších možností ohledně distribuce.
Po odsouhlasení podmínek lze aplikaci publikovat. Samotná publikace trvá několik hodin.
Aktualizace aplikací
Jakmile klikneme v hlavním seznamu aplikací na nějakou specifickou aplikaci, přesměruje nás to do detailu konkrétní aplikace.
V záložce APK máme možnost "Nahrát nový soubor APK k produkci".
Zajisté všichni pochopili, že je třeba vytvořit nový soubor
.apk
s naší aplikací. Aby vše fungovalo jak má, je třeba
přepsat soubor build.gradle
(app). Konkrétně se musí přepsat
versionCode
tak, aby se neshodoval s předchozí verzí, také
doporučuji pro přehlednost přepsat versionName
.

aktualizace souboru build.gradle
Změna API
- upravíme
minSdkVersion
v souborubuild.gradle
(app) - pomocí Sync gradle button synchronizujeme aplikaci
- rebuildujeme celý projekt

build.gradle změna API
Selhání a chyby
V detailu aplikace máme záložku "Selhání a chyby ANR". Po správném nastavení filtru se nám všechny chyby vypíší do tabulky:

Chyby, výpis
V každém přehledu chyby najdeme grafy a informace. Dozvíme se zde, na jaké verzi aplikace, Androidu a na jakém zařízení došlo k chybě. Může se totiž stát, že je aplikace nestabilní jen na určitých zařízeních a pomocí těchto výpisů bychom měli přijít na to, kde je chyba:

Chyby, grafy
Chyba, kterou máme ukázanou na obrázcích výše, způsobovala pád aplikace na zařízení LG G2. Příčinou bylo nevhodné rozlišení textury umístěné na pozadí:

Chyby, část výpisu
Náš Android kurz je u konce a doufám, že vám pomohl naučit se
programovat aplikace pro tuto platformu. Určitě se s námi podělte o vaše
výtvory
V další, doplňující lekci, Android programování - Grafický návrh aplikací, se podíváme na nastavení layoutů.