24. diel - Práca s bitmapy v Android a publikácie na Google Play
V minulej lekcii nášho Android kurzu, Poznámkový bloček pre Android - Info a dokončenie , sme dokončili
poznámkový bloček s databázou. V dnešnom tutoriálu sa pozrieme na prácu s
bitmapy a nakoniec si ukážeme ako publikovať našu hotovú aplikáciu na
Google Play
.
Ďalšie možnosti Intent a práce s bitmapy
V tejto krátkej kapitolce si preberieme ďalšie možnosti Intent, konkrétne vytáčanie čísel a prácu s bitmapy, aby sme sa naučili upravovať obrázky.
Využitie systémových aktivít
Vaša aplikácia môže pomocou Intent zavolať systémovú aktivitu. Toho môžeme v našich aplikáciách ľubovoľne využívať.
Volanie
Použitie je veľmi jednoduché. Na samotné začatie volanie nám stačí:
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(tel:730910860)));
Tento riadok vyvolá systémovú aktivitu pre hovory a odovzdá ju zadané číslo. Tento postup je však celkom nekomfortné. Ak chceme, aby všetko prebehlo automaticky (užívateľ nemusel 2x vytáčať hovor) a po ukončení hovoru prebehol návrat do pôvodnej aplikácie, je potrebné urobiť nejaké úpravy. V praxi to potom bude vyzerať nasledovne:
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 riešenie je už plne automatizované, pre väčšiu prehľadnosť je rozpísané do dvoch metód. K aplikácii môžete pridať databázu kontaktov a máte plnohodnotnú aplikáciu pre volanie.
FastCall aplikácie
Bitmap
Týmto príkladom si teda ukážeme prácu s obrázkami.
Práca s kanálmi aRGB
Skúsme si na obrázok aplikovať červený filter. Postupne pomocou dvoch
cyklov prechádzame celú bitmap
pixel po pixeli. Vždy vezmeme
jeden pixel, pomocou metódy color.red
získame hodnotu kanála R a
ostatné dva kanály vynulujeme. Prvý parameter vo funkcii
Color.argb()
je transparentnosť:
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írovanie
Prosté skopírovanie bitmapy potom vyzerá 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); }
Hľadanie a počítanie pixelov
Ak potrebujeme zistiť, koľkokrát sa v danom obrázku vyskytuje určitý pixel, mohli by sme to riešiť naprí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 by sme mohli pokračovať ďalej. Nie je teda moc ťažké vytvoriť si vlastný rastrový editor.
Práca s Bitmap
Google Play
Každý z nás určite pozná Google Play a vie, že ide o on-line platformu, na ktorej sa nachádza rôzne aplikácie určené na distribúciu zdarma alebo za poplatok. Ide o najrozšírenejší spôsob distribúcie aplikácií, počty stiahnutí sa počítajú na desiatky miliárd. Google Play ako taký oficiálne vznikol 6. marca 2012 zlúčením Android Marketu a Google Music.
Najčastejšie tu nájdeme aplikácie pre inteligentné telefóny a tablety. Konkrétne časti Google Play, kde sú k stiahnutiu tieto aplikácie, sa hovorí Google Play Store.
Registrácia účtu vývojárov
Ako prvý potrebujeme účet vývojárov. Zaregistrovať sa môžeme na tomto odkaze: https://play.google.com/...lish/signup/
Jednorazový registračný poplatok je v súčasnej dobe
25$
.
Nahranie APK
APK
- v hornej časti obrazovky máme ponuku Pridať novú aplikáciu
- v rozbaľovacej ponuke vyberieme predvolený jazyk a pridáme názov aplikácie
- vyberieme možnosť Nahrať súbor APK
Popis
Po nastavení jazykov, ktoré v rámci našej aplikácie podporujeme, musíme pridať podrobnosti o produkte (záložka záznam v obchode):
Názov
Názov aplikácie na Google Play.
Krátky popis
Zobrazuje sa pri prezeraní stránky s podrobnosťami o našej aplikácii. Maximálny počet znakov je 80.
Úplný opis
V úplnom opise je limit 4000 znakov.
Grafické podklady a zaradenie do kategórie
Musíme si pripraviť nejaké grafické podklady pre prezentáciu našej aplikácie. Najvyššie snímky priamo z mobilu, kde je aplikácia nainštalovaná. Aby naša aplikácia bola zaradená do zoznamu "Vhodné pre tablety", musíme nahrať aspoň jeden obrázok aplikácie na 7 "a 10" tabletu.
Cena a distribúcia
Teraz prejdeme do záložky "Cena a distribúcia", kde vyberieme zacielenie na určité krajiny, či je aplikácia platená alebo zadarmo, a pár ďalších možností ohľadom distribúcie.
Po odsúhlasení podmienok možno aplikáciu publikovať. Samotná publikácia trvá niekoľko hodín.
Aktualizácie aplikácií
Akonáhle klikneme v hlavnom zozname aplikácií na nejakú špecifickú aplikáciu, presmeruje nás to do detailu konkrétnej aplikácie.
V záložke APK máme možnosť "Nahrať nový súbor APK na produkciu".
Zaiste všetci pochopili, že je potrebné vytvoriť nový súbor
.apk
s našou aplikáciou. Aby všetko fungovalo ako má, je
potrebné prepísať súbor build.gradle
(app). Konkrétne sa musí
prepísať versionCode
tak, aby sa nezhodoval s predchádzajúcou
verziou, tiež odporúčam pre prehľadnosť prepísať
versionName
.
aktualizácie súboru build.gradle
Zmena API
- upravíme
minSdkVersion
v súborebuild.gradle
(app) - pomocou Sync grádl button synchronizujeme aplikácii
- rebuildujeme celý projekt
build.gradle zmena API
Zlyhania a chyby
V detaile aplikácie máme záložku "Zlyhanie a chyby ANR". Po správnom nastavení filtra sa nám všetky chyby vypíšu do tabuľky:
Chyby, výpis
V každom prehľade chyby nájdeme grafy a informácie. Dozvieme sa tu, na aké verziu aplikácie, Androidu a na akom zariadení sa vyskytla chyba. Môže sa totiž stať, že je aplikácia nestabilný len na určitých zariadeniach a pomocou týchto výpisov by sme mali prísť na to, kde je chyba:
Chyby, grafy
Chyba, ktorú máme zobrazené na obrázkoch vyššie, spôsobovala pád aplikácie na zariadení LG G2. Príčinou bolo nevhodné rozlíšenie textúry umiestnené na pozadí:
Chyby, časť výpisu
Náš Android kurz je u konca a dúfam, že vám pomohol naučiť sa programovať aplikácie pre túto platformu. Určite sa s nami podeľte o vaše výtvory