Slijede razlike između dviju inačica stranice
Starije izmjene na obje strane Starija izmjena Novija izmjena | Starija izmjena Novija izmjena Novije izmjene na obje strane | ||
2018:karlo_siladi:projektni_zadatak [2018/06/14 00:54] ksiladi kod android aplikacije |
2018:karlo_siladi:projektni_zadatak [2018/06/14 01:25] ksiladi [Shema spajanja sustava] |
||
---|---|---|---|
Redak 54: | Redak 54: | ||
* Bluetooth modul [[https://www.olimex.com/Products/Components/RF/BLUETOOTH-SERIAL-HC-06/resources/hc06.pdf|HC-06]] | * Bluetooth modul [[https://www.olimex.com/Products/Components/RF/BLUETOOTH-SERIAL-HC-06/resources/hc06.pdf|HC-06]] | ||
- | ===== Arduino Uno - Centralna jedinica ===== | + | ===== Arduino Uno/Duemilanove - Centralna jedinica ===== |
Arduino Uno je razvojna platforma zasnovana na [[http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf|ATmega328p]] mikrokontroleru. Ima 14 ulazno-izlaznih pinova (izvoda) od kojih 6 može biti iskorišteno za pulsno-širinsku modulaciju (engl. //pulse-width modulation, PWM//), 6 analognih ulaza, kvarcni oscilator frekvencije 16MHz, USB konektor za spajanje s računalom, konektor za napajanje, ICSP ( In Circuit Serial Programming ) konektor te tipkalo za reset mikrokontrolera. | Arduino Uno je razvojna platforma zasnovana na [[http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf|ATmega328p]] mikrokontroleru. Ima 14 ulazno-izlaznih pinova (izvoda) od kojih 6 može biti iskorišteno za pulsno-širinsku modulaciju (engl. //pulse-width modulation, PWM//), 6 analognih ulaza, kvarcni oscilator frekvencije 16MHz, USB konektor za spajanje s računalom, konektor za napajanje, ICSP ( In Circuit Serial Programming ) konektor te tipkalo za reset mikrokontrolera. | ||
Redak 62: | Redak 62: | ||
{{:2018:karlo_siladi:uno_specifications.png?nolink&436x500|Arduino Uno specifications}} | {{:2018:karlo_siladi:uno_specifications.png?nolink&436x500|Arduino Uno specifications}} | ||
- | U našem sustavu Arduino Uno je centralna jedinica koja je zadužena za komunikaciju s ostalim podsustavima. Odabrana je zbog svoje pristupačnosti, cijene, kratkog vremena razvoja, jednostavnosti korištenja te cijene. | + | U našem sustavu Arduino Uno/Duemilanove je centralna jedinica koja je zadužena za komunikaciju s ostalim podsustavima. Odabrana je zbog svoje pristupačnosti, cijene, kratkog vremena razvoja, jednostavnosti korištenja te cijene. |
====== mp3 modul DFPlayer YX5200 ====== | ====== mp3 modul DFPlayer YX5200 ====== | ||
Redak 88: | Redak 88: | ||
===== Shema spajanja sustava ===== | ===== Shema spajanja sustava ===== | ||
- | {{:2018:karlo_siladi:shema_sustava2.png?nolink&400x285}} | + | {{:2018:karlo_siladi:shema_sustava2.png?nolink&400x285}}{{ :2018:karlo_siladi:sustav_ozicenje.png?nolink&400x284}} |
====== Prototipno kućište ====== | ====== Prototipno kućište ====== | ||
Redak 96: | Redak 97: | ||
Za lakše rukovanje sustav je smješten u plastično kućište. Zbog malog dometa RFID čitača isti je postavljen izvan kućišta. Također izvan se nalaze i slušalice. | Za lakše rukovanje sustav je smješten u plastično kućište. Zbog malog dometa RFID čitača isti je postavljen izvan kućišta. Također izvan se nalaze i slušalice. | ||
- | {{:2018:karlo_siladi:kuciste.jpg?nolink&300x400}} | + | {{:2018:karlo_siladi:kuciste.jpg?nolink&300x400|kuciste.jpg}} |
====== Komunikacija s vanjskim sustavima ====== | ====== Komunikacija s vanjskim sustavima ====== | ||
Redak 112: | Redak 113: | ||
===== Android Studio ===== | ===== Android Studio ===== | ||
- | [[https://developer.android.com/studio/|Za izradu Android aplikacije potrebno je instalirati razvojni alat Android Studio. Najnovija verzija trenutno je 3.1.3. a dostupna je za preuzimanje na sljedećoj poveznici: https://developer.android.com/studio/]] . | + | [[https://developer.android.com/studio/|Za izradu Android aplikacije potrebno je instalirati razvojni alat Android Studio. Najnovija verzija trenutno je 3.1.3. a dostupna je za preuzimanje na sljedećoj poveznici: https://developer.android.com/studio/]] . |
<font 12pt/inherit;;blue;;inherit>Detaljne upute za instalaciju razvojnog alata Android Studio</font> | <font 12pt/inherit;;blue;;inherit>Detaljne upute za instalaciju razvojnog alata Android Studio</font> | ||
Redak 120: | Redak 121: | ||
==== Kreiranje projekta ==== | ==== Kreiranje projekta ==== | ||
- | <font 12pt/inherit;;blue;;inherit>Nakon uspješne instalacije razvojnog alata potrebno je kreirati novi Android projekt. Kod stvaranja projekta potrebno je unijeti proizvoljno ime projekta. Korišteno ime je CKGE_TMP_i SPVP_projekt CKGE_TMP_i . Stvara se novi direktorij istog imena u kojeg se spremaju programski kodovi, biblioteke te resursi potrebni za aplikaciju. Nakon toga potrebno je unijeti verziju platforme za koju se projekt izrađuje. Odabrana je verzija CKGE_TMP_i API: 19 Android 4.4 (KitKat) CKGE_TMP_i što je relativno stara verzija Android operacijskog sustava, ali je time omogućeno da se aplikacija može pokretati na većini mobilnih uređaja jer je pokretanje moguće i na svim novijim verzijama Androida.</font> | + | Nakon uspješne instalacije razvojnog alata potrebno je kreirati novi Android projekt. Kod stvaranja projekta potrebno je unijeti proizvoljno ime projekta. Korišteno ime je SPVP_projekt . Stvara se novi direktorij istog imena u kojeg se spremaju programski kodovi, biblioteke te resursi potrebni za aplikaciju. Nakon toga potrebno je unijeti verziju platforme za koju se projekt izrađuje. Odabrana je verzija API: 19 Android 4.4 (KitKat) što je relativno stara verzija Android operacijskog sustava, ali je time omogućeno da se aplikacija može pokretati na većini mobilnih uređaja jer je pokretanje moguće i na svim novijim verzijama Androida. |
- | <font 12.0pt/inherit;;inherit;;inherit>Pri kreiranju novog projekta, stvoren je novi CKGE_TMP_i Activity CKGE_TMP_i koji prikazuje grafičko sučelje koje vidi korisnik pri pokretanju aplikacije. Potrebno je odabrati CKGE_TMP_i Empty Activity CKGE_TMP_i i dodijeliti mu naziv CKGE_TMP_i MainActivity. CKGE_TMP_i</font> | + | Pri kreiranju novog projekta, stvoren je novi Activity koji prikazuje grafičko sučelje koje vidi korisnik pri pokretanju aplikacije. Potrebno je odabrati Empty Activity i dodijeliti mu naziv MainActivity. |
- | === AndroidManifest.xml === | + | === AndroidManifest.xml === |
- | <font 12pt/inherit;;inherit;;inherit>Kako bi aplikacija ispravno radila potrebno je u datoteku CKGE_TMP_i AndroidManifest.xml CKGE_TMP_i dodati potrebne dozvole za korištenjem CKGE_TMP_i Bluetooth CKGE_TMP_i sučelja.</font> | + | Kako bi aplikacija ispravno radila potrebno je u datoteku AndroidManifest.xml dodati potrebne dozvole za korištenjem Bluetooth sučelja. |
- | <font 9pt/inherit;;inherit;;inherit><uses-permission android:name="android.permission.BLUETOOTH" /></font> | + | <code> |
+ | <uses-permission android:name="android.permission.BLUETOOTH" /> | ||
+ | <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> | ||
+ | </code> | ||
- | <font 9pt/inherit;;inherit;;inherit><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /></font> | + | Potrebno je i navesti sve Activity java razrede koji se koriste u aplikaciji. Korišteni su MainActivity , ProductInfoActivity i ProjectAboutActivity. |
- | <font 12.0pt/inherit;;inherit;;inherit>Potrebno je i navesti sve CKGE_TMP_i Activity CKGE_TMP_i java razrede koji se koriste u aplikaciji. Korišteni su CKGE_TMP_i MainActivity CKGE_TMP_i , CKGE_TMP_i ProductInfoActivity CKGE_TMP_i i CKGE_TMP_i ProjectAboutActivity. CKGE_TMP_i</font> | + | Oznakom intent-filter daje se do znanja Androd OS-u koju Activity treba pokrenuti prilikom pokretanja aplikacije. U manifestu se još navode i korištene ikone. |
- | <font 12.0pt/inherit;;inherit;;inherit>Oznakom CKGE_TMP_i intent-filter CKGE_TMP_i daje se do znanja Androd OS-u koju Activity treba pokrenuti prilikom pokretanja aplikacije. U manifestu se još navode i korištene ikone.</font> | + | === Struktura proizvoda === |
- | <code><font inherit/inherit;;#e8bf6a;;inherit><?</font><font inherit/inherit;;#bababa;;inherit>xml version=</font><font inherit/inherit;;#6a8759;;inherit>"1.0"</font><font inherit/inherit;;#bababa;;inherit>encoding=</font><font inherit/inherit;;#6a8759;;inherit>"utf-8"</font><font inherit/inherit;;#e8bf6a;;inherit>?></font><font inherit/inherit;;#e8bf6a;;inherit><manifest</font><font inherit/inherit;;#bababa;;inherit>xmlns:</font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>=</font><font inherit/inherit;;#6a8759;;inherit>"http://schemas.android.com/apk/res/android"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#bababa;;inherit>package=</font><font inherit/inherit;;#6a8759;;inherit>"com.example.karlosiladi.bazapodataka"</font><font inherit/inherit;;#e8bf6a;;inherit>></font><font inherit/inherit;;#e8bf6a;;inherit><uses-permission</font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:name=</font><font inherit/inherit;;#6a8759;;inherit>"android.permission.BLUETOOTH_ADMIN"</font><font inherit/inherit;;#e8bf6a;;inherit>/></font><font inherit/inherit;;#e8bf6a;;inherit><uses-permission</font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:name=</font><font inherit/inherit;;#6a8759;;inherit>"android.permission.BLUETOOTH"</font><font inherit/inherit;;#e8bf6a;;inherit>/></font><font inherit/inherit;;#e8bf6a;;inherit><application</font><font inherit/inherit;;#e8bf6a;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:allowBackup=</font><font inherit/inherit;;#6a8759;;inherit>"true"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:icon=</font><font inherit/inherit;;#6a8759;;inherit>"@mipmap/ic_launcher_spvp"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:label=</font><font inherit/inherit;;#6a8759;;inherit>"@string/app_name"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:roundIcon=</font><font inherit/inherit;;#6a8759;;inherit>"@mipmap/ic_launcher_spvp_round"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:supportsRtl=</font><font inherit/inherit;;#6a8759;;inherit>"true"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:theme=</font><font inherit/inherit;;#6a8759;;inherit>"@style/AppTheme"</font><font inherit/inherit;;#e8bf6a;;inherit>></font><font inherit/inherit;;#e8bf6a;;inherit><activity</font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:name=</font><font inherit/inherit;;#6a8759;;inherit>".ProductInfoActivity"</font><font inherit/inherit;;#e8bf6a;;inherit>/></font><font inherit/inherit;;#e8bf6a;;inherit><activity</font><font inherit/inherit;;#e8bf6a;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:name=</font><font inherit/inherit;;#6a8759;;inherit>".MainActivity"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:label=</font><font inherit/inherit;;#6a8759;;inherit>"@string/title_activity_main"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:screenOrientation=</font><font inherit/inherit;;#6a8759;;inherit>"landscape"</font><font inherit/inherit;;#6a8759;;inherit></font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:theme=</font><font inherit/inherit;;#6a8759;;inherit>"@style/AppTheme.NoActionBar"</font><font inherit/inherit;;#e8bf6a;;inherit>></font><font inherit/inherit;;#e8bf6a;;inherit><intent-filter></font><font inherit/inherit;;#e8bf6a;;inherit><action</font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:name=</font><font inherit/inherit;;#6a8759;;inherit>"android.intent.action.MAIN"</font><font inherit/inherit;;#e8bf6a;;inherit>/></font><font inherit/inherit;;#e8bf6a;;inherit><category</font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:name=</font><font inherit/inherit;;#6a8759;;inherit>"android.intent.category.LAUNCHER"</font><font inherit/inherit;;#e8bf6a;;inherit>/></font><font inherit/inherit;;#e8bf6a;;inherit></intent-filter></font><font inherit/inherit;;#e8bf6a;;inherit></activity></font><font inherit/inherit;;#e8bf6a;;inherit><activity</font><font inherit/inherit;;#9876aa;;inherit>android</font><font inherit/inherit;;#bababa;;inherit>:name=</font><font inherit/inherit;;#6a8759;;inherit>".ProjectAboutActivity"</font><font inherit/inherit;;#e8bf6a;;inherit>/></font><font inherit/inherit;;#e8bf6a;;inherit></application></font><font inherit/inherit;;#e8bf6a;;inherit></manifest></font></code> | + | <code> |
+ | <?xml version="1.0" encoding="utf-8"?> | ||
+ | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
+ | package="com.example.karlosiladi.bazapodataka"> | ||
- | === Struktura proizvoda === | + | <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> |
+ | <uses-permission android:name="android.permission.BLUETOOTH" /> | ||
- | <code><font inherit/inherit;;#cc7832;;inherit>public class</font>Products { | + | <application |
- | <font inherit/inherit;;#bbb529;;inherit>@NonNull</font><font inherit/inherit;;#bbb529;;inherit>@PrimaryKey</font><font inherit/inherit;;#bbb529;;inherit></font><font inherit/inherit;;#cc7832;;inherit>private</font>String <font inherit/inherit;;#9876aa;;inherit>productId</font><font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>private</font>String <font inherit/inherit;;#9876aa;;inherit>productName</font><font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>private</font>String <font inherit/inherit;;#9876aa;;inherit>productPrice</font><font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>public</font><font inherit/inherit;;#ffc66d;;inherit>Products</font>() { | + | android:allowBackup="true" |
- | } | + | android:icon="@mipmap/ic_launcher_spvp" |
- | <font inherit/inherit;;#cc7832;;inherit>public</font>String <font inherit/inherit;;#ffc66d;;inherit>getProductId</font>() { <font inherit/inherit;;#cc7832;;inherit>return</font><font inherit/inherit;;#9876aa;;inherit>productId</font><font inherit/inherit;;#cc7832;;inherit>;</font>} | + | android:label="@string/app_name" |
- | <font inherit/inherit;;#cc7832;;inherit>public void</font><font inherit/inherit;;#ffc66d;;inherit>setProductId</font>(String productId) { <font inherit/inherit;;#cc7832;;inherit>this</font>.<font inherit/inherit;;#9876aa;;inherit>productId</font>= productId<font inherit/inherit;;#cc7832;;inherit>;</font>} | + | android:roundIcon="@mipmap/ic_launcher_spvp_round" |
- | <font inherit/inherit;;#cc7832;;inherit>public</font>String <font inherit/inherit;;#ffc66d;;inherit>getProductName</font>() { <font inherit/inherit;;#cc7832;;inherit>return</font><font inherit/inherit;;#9876aa;;inherit>productName</font><font inherit/inherit;;#cc7832;;inherit>;</font>} | + | android:supportsRtl="true" |
- | <font inherit/inherit;;#cc7832;;inherit>public void</font><font inherit/inherit;;#ffc66d;;inherit>setProductName</font>(String productName) { <font inherit/inherit;;#cc7832;;inherit>this</font>.<font inherit/inherit;;#9876aa;;inherit>productName</font>= productName<font inherit/inherit;;#cc7832;;inherit>;</font>} | + | android:theme="@style/AppTheme"> |
- | <font inherit/inherit;;#cc7832;;inherit>public</font>String <font inherit/inherit;;#ffc66d;;inherit>getProductPrice</font>() { <font inherit/inherit;;#cc7832;;inherit>return</font><font inherit/inherit;;#9876aa;;inherit>productPrice</font><font inherit/inherit;;#cc7832;;inherit>;</font>} | + | <activity android:name=".ProductInfoActivity" /> |
- | <font inherit/inherit;;#cc7832;;inherit>public void</font><font inherit/inherit;;#ffc66d;;inherit>setProductPrice</font>(String productPrice) {<font inherit/inherit;;#cc7832;;inherit>this</font>.<font inherit/inherit;;#9876aa;;inherit>productPrice</font>= productPrice<font inherit/inherit;;#cc7832;;inherit>;</font>} | + | <activity |
+ | android:name=".MainActivity" | ||
+ | android:label="@string/title_activity_main" | ||
+ | android:screenOrientation="landscape" | ||
+ | android:theme="@style/AppTheme.NoActionBar"> | ||
+ | <intent-filter> | ||
+ | <action android:name="android.intent.action.MAIN" /> | ||
+ | <category android:name="android.intent.category.LAUNCHER" /> | ||
+ | </intent-filter> | ||
+ | </activity> | ||
+ | <activity android:name=".ProjectAboutActivity" /> | ||
+ | </application> | ||
- | } | + | </manifest> |
</code> | </code> | ||
+ | |||
=== Baza podataka === | === Baza podataka === | ||
- | <code><font inherit/inherit;;#bbb529;;inherit>@Database</font>(<font inherit/inherit;;#d0d0ff;;inherit>entities</font>= {Products.<font inherit/inherit;;#cc7832;;inherit>class</font>}<font inherit/inherit;;#cc7832;;inherit>,</font><font inherit/inherit;;#d0d0ff;;inherit>version</font>= <font inherit/inherit;;#6897bb;;inherit>1</font><font inherit/inherit;;#cc7832;;inherit>,</font><font inherit/inherit;;#d0d0ff;;inherit>exportSchema</font>= <font inherit/inherit;;#cc7832;;inherit>false</font>) | + | <code> |
- | <font inherit/inherit;;#cc7832;;inherit>public abstract class</font>ProductDatabase <font inherit/inherit;;#cc7832;;inherit>extends</font>RoomDatabase { | + | @Database(entities = {Products.class}, version = 1, exportSchema = false) |
- | <font inherit/inherit;;#cc7832;;inherit>private static final</font>String <font inherit/inherit;;#9876aafont-style:italic;;;inherit>DATABASE_NAME</font>= <font inherit/inherit;;#6a8759;;inherit>"products_db"</font><font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>private static</font>ProductDatabase <font inherit/inherit;;#9876aafont-style:italic;;;inherit>INSTANCE</font><font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>public abstract</font>DaoAccess <font inherit/inherit;;#ffc66d;;inherit>daoAccess</font>() <font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>public static</font>ProductDatabase <font inherit/inherit;;#ffc66d;;inherit>getProductDatabase</font>(Context context) { | + | public abstract class ProductDatabase extends RoomDatabase { |
- | <font inherit/inherit;;#cc7832;;inherit>if</font>(<font inherit/inherit;;#9876aafont-style:italic;;;inherit>INSTANCE</font>== <font inherit/inherit;;#cc7832;;inherit>null</font>) { | + | |
- | <font inherit/inherit;;#9876aafont-style:italic;;;inherit>INSTANCE</font>= | + | private static final String DATABASE_NAME = "products_db"; |
- | Room.<font inherit/inherit;;inherit;;inherit>databaseBuilder</font>(context.getApplicationContext()<font inherit/inherit;;#cc7832;;inherit>,</font>ProductDatabase.<font inherit/inherit;;#cc7832;;inherit>class,</font><font inherit/inherit;;#9876aafont-style:italic;;;inherit>DATABASE_NAME</font>) | + | private static ProductDatabase INSTANCE; |
- | .allowMainThreadQueries() | + | public abstract DaoAccess daoAccess() ; |
- | .build()<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font>} | + | |
- | <font inherit/inherit;;#cc7832;;inherit>return</font><font inherit/inherit;;#9876aafont-style:italic;;;inherit>INSTANCE</font><font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font>} | + | public static ProductDatabase getProductDatabase(Context context) { |
- | <font inherit/inherit;;#cc7832;;inherit>public static void</font><font inherit/inherit;;#ffc66d;;inherit>destroyInstance</font>() { | + | if (INSTANCE == null) { |
- | <font inherit/inherit;;#9876aafont-style:italic;;;inherit>INSTANCE</font>= <font inherit/inherit;;#cc7832;;inherit>null;</font><font inherit/inherit;;#cc7832;;inherit></font>} | + | INSTANCE = |
+ | Room.databaseBuilder(context.getApplicationContext(), ProductDatabase.class, DATABASE_NAME) | ||
+ | .allowMainThreadQueries() | ||
+ | .build(); | ||
+ | } | ||
+ | return INSTANCE; | ||
+ | } | ||
+ | |||
+ | public static void destroyInstance() { | ||
+ | INSTANCE = null; | ||
+ | } | ||
} | } | ||
</code> | </code> | ||
+ | |||
=== Sučelje za slanje upita na bazu === | === Sučelje za slanje upita na bazu === | ||
- | <code><font inherit/inherit;;#cc7832;;inherit>public interface</font>DaoAccess { | + | <code> |
- | <font inherit/inherit;;#bbb529;;inherit>@Insert</font><font inherit/inherit;;#bbb529;;inherit></font><font inherit/inherit;;#cc7832;;inherit>void</font><font inherit/inherit;;#ffc66d;;inherit>insertSingleProduct</font>(Products product)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#bbb529;;inherit>@Insert</font><font inherit/inherit;;#bbb529;;inherit></font><font inherit/inherit;;#cc7832;;inherit>void</font><font inherit/inherit;;#ffc66d;;inherit>insertMultipleProducts</font>(List<Products> productsList)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#bbb529;;inherit>@Query</font>(<font inherit/inherit;;#6a8759;;inherit>"SELECT * FROM Products WHERE productId = :productId"</font>) | + | public interface DaoAccess { |
- | Products <font inherit/inherit;;#ffc66d;;inherit>fetchProductByProductId</font>(String productId)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#bbb529;;inherit>@Query</font>(<font inherit/inherit;;#6a8759;;inherit>"SELECT * FROM Products"</font>) | + | @Insert |
- | List<Products> <font inherit/inherit;;#ffc66d;;inherit>getProducts</font>()<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#bbb529;;inherit>@Update</font><font inherit/inherit;;#bbb529;;inherit></font><font inherit/inherit;;#cc7832;;inherit>void</font><font inherit/inherit;;#ffc66d;;inherit>updateProduct</font>(Products product)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#bbb529;;inherit>@Delete</font><font inherit/inherit;;#bbb529;;inherit></font><font inherit/inherit;;#cc7832;;inherit>void</font><font inherit/inherit;;#ffc66d;;inherit>deleteProduct</font>(Products product)<font inherit/inherit;;#cc7832;;inherit>;</font>} | + | void insertSingleProduct (Products product); |
+ | @Insert | ||
+ | void insertMultipleProducts (List<Products> productsList); | ||
+ | @Query("SELECT * FROM Products WHERE productId = :productId") | ||
+ | Products fetchProductByProductId (String productId); | ||
+ | @Query("SELECT * FROM Products") | ||
+ | List<Products> getProducts(); | ||
+ | @Update | ||
+ | void updateProduct (Products product); | ||
+ | @Delete | ||
+ | void deleteProduct (Products product); | ||
+ | } | ||
</code> | </code> | ||
+ | |||
=== Bluetooth handler i reprodukcija zapisa === | === Bluetooth handler i reprodukcija zapisa === | ||
- | <code><font inherit/inherit;;#9876aa;;inherit>h</font>= <font inherit/inherit;;#cc7832;;inherit>new</font>Handler() { | + | <code> |
- | <font inherit/inherit;;#cc7832;;inherit>public void</font><font inherit/inherit;;#ffc66d;;inherit>handleMessage</font>(android.os.Message msg) { | + | h = new Handler() { |
- | <font inherit/inherit;;#cc7832;;inherit>switch</font>(msg.<font inherit/inherit;;#9876aa;;inherit>what</font>) { | + | public void handleMessage(android.os.Message msg) { |
- | <font inherit/inherit;;#cc7832;;inherit>case</font><font inherit/inherit;;#9876aa;;inherit>RECIEVE_MESSAGE</font>: | + | switch (msg.what) { |
- | <font inherit/inherit;;#cc7832;;inherit>byte</font>[] readBuf = (<font inherit/inherit;;#cc7832;;inherit>byte</font>[]) msg.<font inherit/inherit;;#9876aa;;inherit>obj</font><font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font>String strIncom = <font inherit/inherit;;#cc7832;;inherit>new</font>String(readBuf<font inherit/inherit;;#cc7832;;inherit>,</font><font inherit/inherit;;#6897bb;;inherit>0</font><font inherit/inherit;;#cc7832;;inherit>,</font>msg.<font inherit/inherit;;#9876aa;;inherit>arg1</font>)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#9876aa;;inherit>sb</font>.append(strIncom)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>int</font>endOfLineIndex = <font inherit/inherit;;#9876aa;;inherit>sb</font>.indexOf(<font inherit/inherit;;#6a8759;;inherit>"</font><font inherit/inherit;;#cc7832;;inherit>\r\n</font><font inherit/inherit;;#6a8759;;inherit>"</font>)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>if</font>(endOfLineIndex > <font inherit/inherit;;#6897bb;;inherit>0</font>) { | + | case RECIEVE_MESSAGE: |
- | String sbprint = <font inherit/inherit;;#9876aa;;inherit>sb</font>.substring(<font inherit/inherit;;#6897bb;;inherit>0</font><font inherit/inherit;;#cc7832;;inherit>,</font>endOfLineIndex)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#9876aa;;inherit>sb</font>.delete(<font inherit/inherit;;#6897bb;;inherit>0</font><font inherit/inherit;;#cc7832;;inherit>,</font><font inherit/inherit;;#9876aa;;inherit>sb</font>.length())<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#808080;;inherit>//Toast.makeText(MainActivity.this, "From Arduino: " + sbprint, Toast.LENGTH_SHORT).show();</font><font inherit/inherit;;#808080;;inherit></font><font inherit/inherit;;#cc7832;;inherit>if</font>(<font inherit/inherit;;#9876aa;;inherit>mPlayer</font>!= <font inherit/inherit;;#cc7832;;inherit>null</font>) { | + | byte[] readBuf = (byte[]) msg.obj; |
- | <font inherit/inherit;;#9876aa;;inherit>mPlayer</font>.stop()<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font>} | + | String strIncom = new String(readBuf, 0, msg.arg1); |
- | Products product = <font inherit/inherit;;#9876aa;;inherit>db</font>.daoAccess().fetchProductByProductId(sbprint)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>if</font>(product == <font inherit/inherit;;#cc7832;;inherit>null</font>){ | + | sb.append(strIncom); |
- | Toast.<font inherit/inherit;;inherit;;inherit>makeText</font>(MainActivity.<font inherit/inherit;;#cc7832;;inherit>this,</font><font inherit/inherit;;#6a8759;;inherit>"Ne postoji proizvod s ID: "</font>+ sbprint +<font inherit/inherit;;#6a8759;;inherit>" u bazi proizvoda!"</font><font inherit/inherit;;#cc7832;;inherit>,</font>Toast.<font inherit/inherit;;#9876aafont-style:italic;;;inherit>LENGTH_SHORT</font>).show()<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#808080;;inherit>// mPlayer = MediaPlayer.create(MainActivity.this, R.raw.error_sound);</font><font inherit/inherit;;#808080;;inherit>// mPlayer.start();</font><font inherit/inherit;;#808080;;inherit></font><font inherit/inherit;;#9876aa;;inherit>mPlayer</font>= MediaPlayer.<font inherit/inherit;;inherit;;inherit>create</font>(MainActivity.<font inherit/inherit;;#cc7832;;inherit>this,</font>R.raw.<font inherit/inherit;;#9876aafont-style:italic;;;inherit>nemaubazi</font>)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#9876aa;;inherit>mPlayer</font>.start()<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#9876aa;;inherit>productNameTextView</font>.setText(<font inherit/inherit;;#6a8759;;inherit>"Skeniraj sljedeći proizvod..."</font>)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#9876aa;;inherit>productPriceTextView</font>.setText(<font inherit/inherit;;#6a8759;;inherit>""</font>)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font>} <font inherit/inherit;;#cc7832;;inherit>else</font>{ | + | int endOfLineIndex = sb.indexOf("\r\n"); |
- | <font inherit/inherit;;#9876aa;;inherit>productNameTextView</font>.setText(product.getProductName())<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#9876aa;;inherit>productPriceTextView</font>.setText(product.getProductPrice())<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font>String id = product.getProductId()<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>int</font>res = MainActivity.<font inherit/inherit;;#cc7832;;inherit>this</font>.getResources().getIdentifier(<font inherit/inherit;;#6a8759;;inherit>"t"</font>+id<font inherit/inherit;;#cc7832;;inherit>,</font><font inherit/inherit;;#6a8759;;inherit>"raw"</font><font inherit/inherit;;#cc7832;;inherit>,</font>MainActivity.<font inherit/inherit;;#cc7832;;inherit>this</font>.getPackageName())<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit>if</font>(res != <font inherit/inherit;;#6897bb;;inherit>0</font>) { | + | if (endOfLineIndex> 0) { |
- | <font inherit/inherit;;#9876aa;;inherit>mPlayer</font>= MediaPlayer.<font inherit/inherit;;inherit;;inherit>create</font>(MainActivity.<font inherit/inherit;;#cc7832;;inherit>this,</font>res)<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font><font inherit/inherit;;#9876aa;;inherit>mPlayer</font>.start()<font inherit/inherit;;#cc7832;;inherit>;</font><font inherit/inherit;;#cc7832;;inherit></font>} | + | String sbprint = sb.substring(0, endOfLineIndex); |
- | } | + | sb.delete(0, sb.length()); |
+ | //Toast.makeText(MainActivity.this, "From Arduino: " + sbprint, Toast.LENGTH_SHORT).show(); | ||
+ | |||
+ | if(mPlayer != null) { | ||
+ | mPlayer.stop(); | ||
+ | } | ||
+ | Products product = db.daoAccess().fetchProductByProductId(sbprint); | ||
+ | if(product == null){ | ||
+ | Toast.makeText(MainActivity.this, "Ne postoji proizvod s ID: "+ sbprint +" u bazi proizvoda!", Toast.LENGTH_SHORT).show(); | ||
+ | // mPlayer = MediaPlayer.create(MainActivity.this, R.raw.error_sound); | ||
+ | // mPlayer.start(); | ||
+ | mPlayer = MediaPlayer.create(MainActivity.this, R.raw.nemaubazi); | ||
+ | mPlayer.start(); | ||
+ | productNameTextView.setText("Skeniraj sljedeći proizvod..."); | ||
+ | productPriceTextView.setText(""); | ||
+ | } else { | ||
+ | productNameTextView.setText(product.getProductName()); | ||
+ | productPriceTextView.setText(product.getProductPrice()); | ||
+ | String id = product.getProductId(); | ||
+ | int res = MainActivity.this.getResources().getIdentifier("t"+id, "raw", MainActivity.this.getPackageName()); | ||
+ | if(res != 0) { | ||
+ | mPlayer = MediaPlayer.create(MainActivity.this, res); | ||
+ | mPlayer.start(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | break; | ||
} | } | ||
- | <font inherit/inherit;;#cc7832;;inherit>break;</font><font inherit/inherit;;#cc7832;;inherit></font>} | + | }; |
- | }<font inherit/inherit;;#cc7832;;inherit>;</font>}<font inherit/inherit;;#cc7832;;inherit>;</font></code> | + | }; |
+ | </code> | ||