Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:aml:lab3 [2013/10/25 10:03]
esimon [DataBaseHelper]
pl:dydaktyka:aml:lab3 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Dostęp do danych GPS w Androidzie ====== ====== Dostęp do danych GPS w Androidzie ======
 ===== Ambient Profile ===== ===== Ambient Profile =====
-Zintegruj program [[https://​sbobek@bitbucket.org/​sbobek/​aml_gpstracker|GPS Tracker]] z projektem GUI [[https://​sbobek@bitbucket.org/​sbobek/​aml_ambientprofile|Ambient Profile]], tak aby:+Zintegruj program [[https://​sbobek@bitbucket.org/​sbobek/​aml_gpstracker_studio|GPS Tracker]] z projektem GUI [[https://​sbobek@bitbucket.org/​sbobek/​aml_ambientprofile|Ambient Profile]], tak aby:
  
 {{:​pl:​dydaktyka:​aml:​ambient-profile.png?​300 |}}  {{:​pl:​dydaktyka:​aml:​ambient-profile.png?​300 |}} 
   * Pierwszy fragment (**Status**) umożliwiał włączanie i wyłączanie usługi śledzenia.   * Pierwszy fragment (**Status**) umożliwiał włączanie i wyłączanie usługi śledzenia.
-  * Drugi fragment (**Profiles**) wyświetlał listę profili jakie użytkownik aktualnie ma. Dodaj przycisk i aktywność (FragmentDialog) umożliwiający dodanie nowego profilu. Zaprojektuj klasę reprezentującą profil, przechowującą różne rodzaje profilu (nazwa, co ma się dziać kiedy profil jest aktywny)+  * Drugi fragment (**Profiles**) wyświetlał listę profili jakie użytkownik aktualnie ma. Dodaj przycisk i aktywność (FragmentDialog) umożliwiający dodanie nowego profilu. ​**Zaprojektuj** klasę reprezentującą profil, przechowującą różne rodzaje profilu (nazwa, co ma się dziać kiedy profil jest aktywny) 
 +  * Przetestuj działanie aplikacji za pomocą DDMS
   * **Zadanie dodatkowe** Trzeci fragment (Map) wyświetlać powinien mapę z ikonami profili w obszarach ich aktywacji   * **Zadanie dodatkowe** Trzeci fragment (Map) wyświetlać powinien mapę z ikonami profili w obszarach ich aktywacji
 +  * **Zadanie dodatkowe** Do detekcji tego czy ktoś pojawił się w obszarze aktywacji danego profilu wykorzystaj //​geopłoty//​ [[http://​developer.android.com/​training/​location/​geofencing.html|Geofences]]
   ​   ​
 ===== Baza danych ===== ===== Baza danych =====
 Dodaj do projektu klasy odpowiedzialne za zapisywanie i odczyt profili użytkownika z i do bazy SQLite. Dodaj do projektu klasy odpowiedzialne za zapisywanie i odczyt profili użytkownika z i do bazy SQLite.
-Poniżej znajdują się przykłady takich klas do przechowywania danych GPS.+Poniżej znajdują się przykłady takich klas do przechowywania danych GPS. **Zmodyfikuj** je tak aby umożliwiały przechowywanie profili zaprojektowanych w poprzednim ćwiczeniu.
  
-==== GPS ====+Przykładowe wykorzystanie klas poniżej:
 <code java> <code java>
 +//W onCreate tworzymy uchwyt do źródła danych
 +GPSDataSource datasource = new GPSDataSource(getBaseContext());​
 +datasource.open();​
 +
 +//Gdzieś dalej w kodzie wrzucamy dane do bazy:
 +if(datasource != null){
 +  datasource.createGPSEntry(
 +     ​currentLocation.getLatitude(), ​
 +     ​currentLocation.getLongitude(),​
 +     ​Long.toString(currentTime),​
 +     ​refreshFrequency, ​
 +     ​batteryLevel
 +  );
 +
 +//Zamykamy źródło danych w onStop albo onDestroy
 +datasource.close();​
 +</​code>​
 +==== GPS ====
 +Poniżej klasa reprezentująca rekord danych.
 +<file java GPS.java>​
 public class GPS { public class GPS {
     private long id;     private long id;
Linia 37: Linia 59:
 } }
  
-</code>+</file>
  
 ==== DataBaseHelper ==== ==== DataBaseHelper ====
- +Poniżej klasa służąca za uchwyt do bazy danych. 
-<code java>+Tworzy bazę danych i umożliwia operację na tabelach i danych. 
 +Jest wykorzystywana przez klasę //​GPSDataSource//​. 
 +<file java DataBaseHelper.java>
 import android.content.Context;​ import android.content.Context;​
  
Linia 93: Linia 117:
  
  
-</code>+</file>
  
  
 ==== GPSDataSource ==== ==== GPSDataSource ====
 +Klasa opakowuje klasę //​DataBaseHelper//​ udostępniając interfejs dedykowany dla operacji na obiektach klasy //GPS//.
  
-<code java> +<file java GPSDataSource.java>
 import java.util.ArrayList;​ import java.util.ArrayList;​
 import java.util.List;​ import java.util.List;​
Linia 141: Linia 165:
     values.put(DataBaseHelper.COLUMN_FREQUENCY,​ frequency);     values.put(DataBaseHelper.COLUMN_FREQUENCY,​ frequency);
     values.put(DataBaseHelper.COLUMN_BATTERY_LEVEL,​ battery);     values.put(DataBaseHelper.COLUMN_BATTERY_LEVEL,​ battery);
-    ​ 
-   //​System.err.println("​creating:​ Lat: "​+lat+"​ Lon: "​+lon+"​ time: "​+timestamp+ " freq: "​+frequency+"​ battery: "​+battery);​ 
     ​     ​
     long insertId = database.insert(DataBaseHelper.TABLE_GPS,​ null,     long insertId = database.insert(DataBaseHelper.TABLE_GPS,​ null,
Linia 158: Linia 180:
   public void deleteGPS(GPS gps) {   public void deleteGPS(GPS gps) {
     long id = gps.getId();​     long id = gps.getId();​
-    //​System.out.println("​Comment deleted with id: " + id);+
     database.delete(DataBaseHelper.TABLE_GPS,​ DataBaseHelper.COLUMN_ID     database.delete(DataBaseHelper.TABLE_GPS,​ DataBaseHelper.COLUMN_ID
         + " = " + id, null);         + " = " + id, null);
Linia 164: Linia 186:
  
   public List<​GPS>​ getAllGPS() {   public List<​GPS>​ getAllGPS() {
-    List<​GPS> ​comments ​= new ArrayList<​GPS>​();​+    List<​GPS> ​gpses = new ArrayList<​GPS>​();​
  
     Cursor cursor = database.query(DataBaseHelper.TABLE_GPS,​     Cursor cursor = database.query(DataBaseHelper.TABLE_GPS,​
         allColumns, null, null, null, null, null);         allColumns, null, null, null, null, null);
  
-    cursor.moveToFirst(); +    ​if(cursor.moveToFirst()){ 
-    while (!cursor.isAfterLast()) { +      while (!cursor.isAfterLast()) { 
-      GPS gps = cursorToGPS(cursor);​ +        GPS gps = cursorToGPS(cursor);​ 
-      ​comments.add(gps);​ +        gpses.add(gps);​ 
-      cursor.moveToNext();​+        cursor.moveToNext();​ 
 +      }
     }     }
     // Make sure to close the cursor     // Make sure to close the cursor
     cursor.close();​     cursor.close();​
-    return ​comments;+    return ​gpses;
   }   }
  
   private GPS cursorToGPS(Cursor cursor) {   private GPS cursorToGPS(Cursor cursor) {
-   ​GPS gps = null; +    ​GPS gps = null; 
-   ​if (cursor != null) { +    if (cursor != null) { 
-     if (cursor.moveToFirst()) { +       ​gps = new GPS();  
-     ​gps = new GPS(); +       ​gps.setId(cursor.getLong(0));​ 
-  +       ​gps.setLat(cursor.getDouble(cursor.getColumnIndex(DataBaseHelper.COLUMN_LAT)));​ 
-     ​gps.setId(cursor.getLong(0));​ +       ​gps.setLon(cursor.getDouble(cursor.getColumnIndex(DataBaseHelper.COLUMN_LON)));​ 
-     ​gps.setLat(cursor.getDouble(cursor.getColumnIndex(DataBaseHelper.COLUMN_LAT)));​ +       ​gps.setTimestamp(cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TIME)));​ 
-     ​gps.setLon(cursor.getDouble(cursor.getColumnIndex(DataBaseHelper.COLUMN_LON)));​ +       ​gps.setFrequency(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_FREQUENCY)));​ 
-     ​gps.setTimestamp(cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TIME)));​ +       ​gps.setBattery(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_BATTERY_LEVEL)));​ 
-     ​gps.setFrequency(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_FREQUENCY)));​ +    }  
-     ​gps.setBattery(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_BATTERY_LEVEL)));​ +    return gps;
-     } +
-   ​+
-   ​return gps;+
   }   }
  
 +</​file>​
  
- 
-</​code>​ 
  
  
  
-===== Geopłoty ​ ===== 
  
  
  
  
pl/dydaktyka/aml/lab3.1382688197.txt.gz · ostatnio zmienione: 2019/06/27 15:51 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0