Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:aml:lab3 [2013/10/25 10:10] 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. |
| |
Przykładowe wykorzystanie klas poniżej: | Przykładowe wykorzystanie klas poniżej: |
</code> | </code> |
==== GPS ==== | ==== GPS ==== |
<file java> | Poniżej klasa reprezentująca rekord danych. |
| <file java GPS.java> |
public class GPS { | public class GPS { |
private long id; | private long id; |
| |
==== 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; |
| |
} | } |
| |
</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; |
| |
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; |
} | } |
| |
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.setId(cursor.getLong(0)); | gps.setLat(cursor.getDouble(cursor.getColumnIndex(DataBaseHelper.COLUMN_LAT))); |
gps.setLat(cursor.getDouble(cursor.getColumnIndex(DataBaseHelper.COLUMN_LAT))); | gps.setLon(cursor.getDouble(cursor.getColumnIndex(DataBaseHelper.COLUMN_LON))); |
gps.setLon(cursor.getDouble(cursor.getColumnIndex(DataBaseHelper.COLUMN_LON))); | gps.setTimestamp(cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TIME))); |
gps.setTimestamp(cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TIME))); | gps.setFrequency(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_FREQUENCY))); |
gps.setFrequency(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_FREQUENCY))); | gps.setBattery(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_BATTERY_LEVEL))); |
gps.setBattery(cursor.getInt(cursor.getColumnIndex(DataBaseHelper.COLUMN_BATTERY_LEVEL))); | |
} | |
} | } |
return gps; | return gps; |
} | } |
} | } |
</code> | </file> |
| |
| |
| |
===== Geopłoty ===== | |
| |
| |
| |
| |