View Single Post
Staro 12.03.2017., 20:22   #2
De5tr0yer
Avocado
Moj komp
 
De5tr0yer's Avatar
 
Datum registracije: Aug 2005
Lokacija: Zagreb
Postovi: 7,802
Prošlo je dosta vremena od mog pitanja, u međuvremenu sam naučio znatno više nego sam mislio da je potrebno (a bilo je potrebno), tako da sam jučer uspio napraviti koliko-toliko zaokruženu funkcionalnost background servicea na androidu.

U kratkim crtama:
  • osnove objektnog programiranja must-have --> poželjno znanje Jave. Osobno mi je Java mrska, ali uspio sam se nekako natjerati. Nije preteško.
  • Počeo sam jednostavno, da shvatim kako radi USB host: device enumeration, USB port list, interfaces + direction.
  • Primanje bilo kakvih podataka preko USB-a.
  • Prebacio sam se na korištenje usb-serial-for-android, iz kojeg sam naučio da ima priličan broj parametara koji se još moraju "dodati" na osnovno ostvarivanje komunikacijskog kanala s USB uređajem kako bi se moglo ispravno čitati podatke. Postoje gotovi driveri za najpopularnije USB-serial IC-ove, među njima i za moj u vidu Cp21xxSerialDriver.
  • Fenomenalna stvar je bila SerialInputOutputManager (u daljnjem tekstu manager), koji dolazi u paketu sa usb-serial-for-android. Manager reagira na ulazni i/ili izlazni stream podataka na USB-u. Iz toga sam shvatio da nema kruha bez Threadinga. Tu se stvari počinju malo komplicirati, jer za nekog tko nije radio (multi)threading dosad, ne može se samo uzet nečiji primjer i adaptirati, trebalo bi se razumjeti što se radi. Nazad na osnove, pa onda potom tek dalje.
  • Prvo sam koristio također primjere iz gore navedene biblioteke, SerialConsoleActivity. Kad sam počeo dobivati suvisle (očekivane) podatke na USB-u, išao sam korak dalje.
  • Stvaranje poruka od podataka iz USB buffera. Drugim riječima, prepoznavanje koju sam tipku na volanu pritisnuo. KeyMapping.
  • Odrađivanje funkcije kad se prepozna koja je tipka pritisnuta. Iz Manager Threada se informacija u primjerima vraća u UI Thread --> za background service neće ići. U ovom trenu preko UI Threada funkcionira pojačavanje/stišavanje.
  • "Gradnja" servisa: glavni problem mi je bio shvatiti kako iz Managera odraditi podešavanje glasnoće: novim threadom i izgradnjom podklase tipa Runnable koja će se vrtiti na tom threadu. Funkcionira super

Ovo gore je jako puno sitnica i finesa komprimirano u najkraće moguće objašnjenje, tko treba detaljnije, neka pita.

Trenutno pokušavam shvatiti kako mogu kontrolirati mediaplayback (next, previous, ffw, rwd) ako je neki mediastream aktivan, a ako nije da tipke gore/dolje mogu služiti navigiranjem izbornicima. Ako netko ima iskustva, nek mi javi, rado bih prihvatio kratki how-to da si smanjim muku

Kad završim i koliko-toliko uredim kod, osvanut će na githubu, ako će eventualno nekome koristiti.
__________________
Spoiler alert!
De5tr0yer je offline   Reply With Quote