Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:aml:lab3 [2013/10/25 10:02] esimon [GPS] |
pl:dydaktyka:aml:lab3 [2019/06/27 15:50] (aktualna) |
====== 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> |
package com.indect.datasource; | //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; |
private int battery; | private int battery; |
| |
double getLat() { | double getLat() { return lat;} |
return lat; | void setLat(double lat) { this.lat = lat; } |
} | double getLon() { return lon;} |
| void setLon(double lon) { this.lon = lon;} |
void setLat(double lat) { | String getTimestamp() { return timestamp; } |
this.lat = lat; | void setTimestamp(String timestamp) { this.timestamp = timestamp; } |
} | public long getId() { return id; } |
| public void setId(long id) { this.id = id; } |
double getLon() { return lon;} | public int getBattery() { return battery; } |
void setLon(double lon) { this.lon = lon;} | public void setBattery(int battery) { this.battery = battery; } |
String getTimestamp() { return timestamp; } | public int getFrequency() { return frequency; } |
void setTimestamp(String timestamp) { this.timestamp = timestamp; } | public void setFrequency(int frequency) {this.frequency = frequency; } |
public long getId() { return id; } | |
public void setId(long id) { this.id = id; } | |
public int getBattery() { return battery; } | |
public void setBattery(int battery) { this.battery = battery; } | |
public int getFrequency() { return frequency; } | |
public void setFrequency(int frequency) {this.frequency = frequency; } | |
| |
} | } |
| |
</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; |
| |
@Override | @Override |
public void onCreate(SQLiteDatabase database) { | public void onCreate(SQLiteDatabase database) { |
// System.err.println(DATABASE_CREATE); | |
database.execSQL(DATABASE_CREATE); | database.execSQL(DATABASE_CREATE); |
} | } |
} | } |
| |
</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; |
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, |
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); |
| |
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 ===== | |
| |
| |
| |
| |