Форум программистов, компьютерный форум CyberForum.ru

GPSTracker как Service - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Spinner http://www.cyberforum.ru/android-dev/thread1456825.html
кто знает как сделать так чтобы при выборе пункта из Spinner выполнялся отдельный кусок кода? в моем случае есть код для генерации случайных чисел(ключ) и нужно сделать так чтобы при выборе длины ключа из списка Spinner'а длина ключа менялась на выбраную.
Программирование Android Удаление записей из таблицы Когда удалял последнюю запись из таблицы из БД все работало норм! А когда удалили запись к примеру под №1, после попытался вывести данные - ошибка! С чем это связано? db.delete("mytable", "id = " + id, null); http://www.cyberforum.ru/android-dev/thread1456771.html
Программирование Android Генерация Color Palette
Есть ли инструмент который генерирует все остальные цвета (http://www.google.com/design/spec/style/color.html#) при указании лишь PrimaryColor?
Задача: сделать клиент под андроид для существующего сервера на php Программирование Android
Доброго времени суток! Дано: есть сервер ngins c базой данных на mysql. Есть клиент на php, все хорошо работает. Задача: сделать клиент под андроид, в котором реализована часть функций клиента на php. Проблема: не получается сохранить устройство в сессии. Т.е. я залогинился в отдельном потоке, пытаюсь сделать GET запрос на сервер, а в ответ приходит страница, в которой предлагается...
Программирование Android Сервисы, биндинг http://www.cyberforum.ru/android-dev/thread1456382.html
Добрый день. Такой вопрос. Использую такой сценарий работы с сервисом: 1. запускаю сервис (startService) 2. подключаюсь к нему(bindService BIND_AUTO_CREATE) 3. запускаю сервис в фереграунде (startForeground) 4. отключаюсь от сервиса (unbindService) 5. закрываю приложение(сервис продолжает работать) 6. запускаю приложение 7. успешно подключаюсь(bindService BIND_AUTO_CREATE) и после...
Программирование Android Переключение на следующий ListView из предыдущего Ребят, такая проблема. Надо сделать переход по выбранному элементу из одного списка в другой и в нем, к примеру, переход на страницу с описанием выбранного элемента. В хедере наверху должно передаваться имя выбранного элемента из списка. Пример на картинке. Пишу в Android Studio Код из MainActivity Java package com.example.admin.p044_lv; import android.app.Activity; import... подробнее

Показать сообщение отдельно
SkyL1ne_tm
2 / 2 / 0
Регистрация: 06.07.2013
Сообщений: 97

GPSTracker как Service - Программирование Android

24.05.2015, 21:00. Просмотров 802. Ответов 20
Метки (Все метки)

Написал приложение, которое определяет местоположение по GPS/WiFi(мобильным сетям), показывает на карте в виде метки, записывает координаты в базу данных SQLite, а затем можно просматривать треки перемещений за день. Но, приложение работает только когда экран активен.
Возникла потребность сделать так, чтобы определение координат и запись их в БД работало в фоне(экран не активен, приложение свернуто и т.п.)

В MainActivity оставил инициализацию карты, рисование треков и прочее, типа определения переменных и т.п.
В Service перенес запрос на определение местоположение через LocationManager, получение самих координат и запись их в БД. Вот примерный код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
public class TrackerService extends Service implements LocationListener {
 
    final String myLog = "my_Logs";
    LocationManager locationManager;
    double latitude, longitude;
    LatLng myPosition;
    Calendar addTimeCalendar;
    String addDate;
    Cursor c = null;
 
    public void onCreate() {
        super.onCreate();
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    }
 
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(myLog, "onStartCommand");
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000 * 60, 25, this);
        Log.d(myLog, "GPS_Provider request location updates");
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000 * 60, 25, this);
        Log.d(myLog, "Network_Provider request location updates");
        //getLocation(location);
        return super.onStartCommand(intent, flags, startId);
    }
 
    @Override
    public void onLocationChanged(Location location) {
        getLocation(location);
    }
 
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
 
    }
 
    @Override
    public void onProviderEnabled(String provider) {
        getLocation(locationManager.getLastKnownLocation(provider));
    }
 
    @Override
    public void onProviderDisabled(String provider) {
        checkEnabled();
    }
 
    public void getLocation(final Location location) {
        new Thread(new Runnable() {
            public void run() {
                if (location == null)
                    return;
                if (location.getProvider().equals(LocationManager.GPS_PROVIDER)) {
                    Log.d(myLog, "GPS Provider Enabled");
                    latitude = location.getLatitude();
                    longitude = location.getLongitude();
                    myPosition = new LatLng(latitude,longitude);
                    addCoordinates();
                    Log.d(myLog, "---GPS Координаты добавлены---");
                } else if (location.getProvider().equals(LocationManager.NETWORK_PROVIDER)) {
                    Log.d(myLog, "NETWORK PROVIDER Enabled");
                    latitude = location.getLatitude();
                    longitude = location.getLongitude();
                    myPosition = new LatLng(latitude,longitude);
                    addCoordinates();
                    Log.d(myLog, "---Network Координаты добавлены---");
                }
            }
        }).start();
    }
 
    public void addCoordinates() {
        addTimeCalendar = Calendar.getInstance();
        SimpleDateFormat addDayFormat = new SimpleDateFormat("yyyy-MM-dd");
        addDate = addDayFormat.format(addTimeCalendar.getTime());
        SQL sqlHelper = new SQL(this);
        SQLiteDatabase db = sqlHelper.getWritableDatabase();
        ContentValues cv = new ContentValues();
        Log.d(myLog, "--- Insert in coordinates: ---");
        cv.put("Latitude", latitude);
        cv.put("Longitude", longitude);
        cv.put("Time", addDate);
        long rowID = db.insert("coordinates", null, cv);
        Log.d(myLog, "row inserted, ID = " + rowID);
        db.close();
        sqlHelper.close();
    }
 
    public void onDestroy() {
        super.onDestroy();
        Log.d(myLog, "onDestroy");
    }
 
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
 
}
Собственно вопрос:
1. Как передать myPostition, т.е. latitude и longitude, из метода getLocation сервиса в MainActivity, чтобы потом их можно было поместить на карту в виде маркера?
2. Правильно ли я сделал, что поместил запрос на обновление локации(местоположения) в onStartCommand? Или это нужно было сделать в onCreate() сервиса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru