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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 67, средняя оценка - 4.82
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
#1

Android + GPS + SMS + PC - Android

08.07.2013, 14:25. Просмотров 8355. Ответов 75
Метки нет (Все метки)

Всем привет, друзья, подскажите,

Я никогда прежде не сталкивался особо с программированием под Java, да и с Android(программами в частности). На данном этапе я как, знающий юзверь, который по примерам может написать программу под Android.

Мне предстоит задача написать (как могу, как знаю) программу под Android, которая отправляла бы по запросу GPS координаты на PC, или на мобильник что ль. Т.е. в проге указывается заранее пользователем мобильный номер на котоорый пойдет рассылка. А тот, кто хочет узнать адрес - присылает СМС запрос на телефон, тот отвечает координатами GPS. Далее на PC(пока хз как вообще) эти координаты будут выводиться на мини-интерактивной карте.

Под PC на C# напишу наверное, или Flash\HTML.

Может есть у кого примеры (Step by step) с описанием и картинками того как мою задачу осуществить ? Примерам буду рад любым, а также критике =] А еще больше если кто-нибудь согласится поддержать тему.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
10.07.2013, 14:45     Android + GPS + SMS + PC #21
вечером выложу (если не забуду :-) ) сервис для работы с GPS.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
10.07.2013, 14:49  [ТС]     Android + GPS + SMS + PC #22
Цитата Сообщение от haribo Посмотреть сообщение
вечером выложу (если не забуду :-) ) сервис для работы с GPS.
Готовый ? Мне желательно с исходниками, чтобы я смог изучить его внутренности и може на его онснове воплотить свою задумку... Буду благодарен.
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
10.07.2013, 14:50     Android + GPS + SMS + PC #23
Вечером забуду.
В этой версии есть пара NDA TODO, в остальном полезные методы есть =)

Service:
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/**
 * User: haribo
 * Date: 18.04.13
 * Time: 22:54
 */
public class GPSRobot extends Service {
 
    private Timer timer = new Timer();
    private Integer timerSeconds;
    private String error;
    private List<String> coordinates;
    private double latitude;
    private double longitude;
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO продумать возможную логику
        if ((flags & START_FLAG_RETRY) == 0) {
            // TODO повторный запуск
        } else {
            // TODO фоновые процессы
        }
 
        Bundle extras = intent.getExtras();
        if (extras != null) {
            if (extras.containsKey("imageNew")) {
                String imagePath = extras.getString("imagePath");
                saveNewPhoto(imagePath);
            }
        }
 
        return Service.START_REDELIVER_INTENT;
    }
 
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
 
    private final GPSRobotInterface.Stub mBinder = new GPSRobotInterface.Stub() {
 
        public void setSendPeriod(int seconds) {
            timerSeconds = seconds;
 
            if (timerSeconds == null || timerSeconds == 0) {
                error = "Установить период отправки координат";
                return;
            }
 
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    setCoordinates();
                }
            }, seconds * 1000, seconds * 1000);
        }
 
        public List<String> calculateCoordinates() {
            setCoordinates();
 
            /*
            Если таймер времени != null, значит функция получения координат по времени включена, начинаем отсчет заного
            после получения координат.
             */
            if (timerSeconds != null) {
                setSendPeriod(timerSeconds);
                Log.d("calculateCoordinates", "setSendPeriod STARTED after check timersecond != null");
            }
 
            if (coordinates != null) {
                return coordinates;
            } else {
                return null;
            }
        }
 
        public List<String> getCoordinates() {
            return coordinates;
        }
 
        public String getCityByCoordinates(double latitude, double longitude) throws RemoteException {
            Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
            String countryName = null;
            try {
                List<Address> addresses = geoCoder.getFromLocation(latitude, longitude, 1);
 
                if (addresses.size() > 0) {
                    countryName = addresses.get(0).getAdminArea();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            return countryName;
        }
 
        public String getCity() throws RemoteException {
            setCoordinates();
            Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
            String countryName = null;
            try {
                List<Address> addresses = geoCoder.getFromLocation(latitude, longitude, 1);
 
                if (addresses.size() > 0) {
                    countryName = addresses.get(0).getLocality();
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            return countryName;
        }
 
        public String getError() {
            return error;
        }
    };
 
    private void setCoordinates() {
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        String provider = getProvider(locationManager);
        /*
        Если GPS выключен, а по заданным критериям не удалось вычислить подоходящий провайдер -
        получаем провайдер с минимальной точностью.
        */
        if (provider == null) {
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_COARSE);
            criteria.setCostAllowed(false);
            provider = locationManager.getBestProvider(criteria, true);
        }
        Location location = locationManager.getLastKnownLocation(provider);
        latitude = location.getLatitude();
        longitude = location.getLongitude();
        List<String> coords = new ArrayList<>();
        coords.add(Double.toString(latitude));
        coords.add(Double.toString(longitude));
 
        // TODO
        /*
        пришло время отправить координату, но интернета нет:
        если переменная periodBehavior = true - как только появился интернет(internetConn = true) -
        координаты посылаются, если false - ждет следующего времени.
        */
        coordinates = coords;
        stopSelf();
    }
 
    /*
    Получения всех включенных(возможных) провайдеров, если GPS включен, значит используем GPS.
    Если выключен - пытаемся получить наилучший провайдер по заданным критериям. Если критерии не заданы -
    создаем критерии с лучшей точностью и отсутсвием права взымать дополнительные средства за использование GPS.
     */
    private String getProvider(LocationManager locationManager) {
        String provider = null;
 
        List<String> enabledProviders = locationManager.getProviders(true);
        if (enabledProviders.size() != 0) {
            for (String enabledProvider : enabledProviders) {
                switch (enabledProvider) {
                    case LocationManager.GPS_PROVIDER:
                        provider = LocationManager.GPS_PROVIDER;
                        break;
                    case LocationManager.NETWORK_PROVIDER:
                        provider = LocationManager.NETWORK_PROVIDER;
                        break;
                    case LocationManager.PASSIVE_PROVIDER:
                        provider = LocationManager.PASSIVE_PROVIDER;
                        break;
                    default:
                        provider = getBestProvider(locationManager);
                        break;
                }
            }
        } else {
            provider = getBestProvider(locationManager);
        }
        return provider;
    }
 
    private String getBestProvider(LocationManager locationManager) {
        Criteria criteria = new Criteria();
        criteria.setCostAllowed(false);
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        return locationManager.getBestProvider(criteria, true);
    }
}
AIDL для взаимодействия с методами сервиса
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * User: haribo
 * Date: 19.04.13
 * Time: 1:48
*/
interface GPSRobotInterface {
    /**
     * Включить сервис получения координат, получить координаты
     * @return Объект с координатами.
     */
    List<String> calculateCoordinates();
 
    void setSendPeriod(int seconds);
 
    List<String> getCoordinates();
 
    String getCity();
 
    String getCityByCoordinates(double latitude, double longitude);
 
    String getError();
}
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
10.07.2013, 14:52  [ТС]     Android + GPS + SMS + PC #24
не могли бы вы с проектом скинуть ?
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
10.07.2013, 14:53     Android + GPS + SMS + PC #25
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
не могли бы вы с проектом скинуть ?
Нет.
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
10.07.2013, 14:55  [ТС]     Android + GPS + SMS + PC #26
Я указал в самом начале, что я еще не вскурсе всех возможностей Eclipse, и не все ее функции знаю, осваиваю по мере надобности... Ну нет так нет, буду пробовать код куда-нибудь вставить [=
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
10.07.2013, 15:00     Android + GPS + SMS + PC #27
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
Я указал в самом начале, что я еще не вскурсе всех возможностей Eclipse, и не все ее функции знаю, осваиваю по мере надобности... Ну нет так нет, буду пробовать код куда-нибудь вставить [=
Дело не в моей зловредности, а в других обстоятельств. Проект который использует данный сервис тебе ничем не поможет. В нем просто вызываются методы из сервиса + обработка логики включения/отключения сервиса.

Для того чтобы разобраться с проектами открой github и поищи проекты android приложений.
Для того чтобы разобраться с моими сервисом почитай про Service, AIDL, и все методы которые описаны в моем коде.
Впихивать код никуда не надо, то что я дал, это два обычных java класса. Создай классы в проекте и скопипасти код, а лучше перепиши руками, с пониманимаем происходяшего - не понятно? гугл. Можно в несколько итераций.
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
10.07.2013, 15:30  [ТС]     Android + GPS + SMS + PC #28
Вас понял, буду читать ! Правда на работе проблематично -каждую минуту дергают юзвери )))
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
11.07.2013, 16:09  [ТС]     Android + GPS + SMS + PC #29
Ребят, гляньте вот этот проект http://hitage.ru/content/pishem-svoi...tor-na-android (там внизу на гетхаб имеется сорс) попробуйте его скомпелировать... Я скачал проект, добавил все файлы проекта в компилятор, но на папке SRC/... на каждом классе ошибки. Может я чего не установил из комплекта SDK ? Подскажите оленю...
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
11.07.2013, 16:12     Android + GPS + SMS + PC #30
Не иду по ссылки, не смотрю ничего, дай угадаю: проблема в самой верхней строчке: package com.*.* ?
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
11.07.2013, 16:15  [ТС]     Android + GPS + SMS + PC #31
xmlns:android="http://schemas.android.com/apk/res/android" ?
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
11.07.2013, 16:17     Android + GPS + SMS + PC #32
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
xmlns:android="http://schemas.android.com/apk/res/android" ?
Ты же сказал что ошибки в папке src...
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
11.07.2013, 16:19  [ТС]     Android + GPS + SMS + PC #33
Проблема в классах наверное, то есть такое ощущение что либо где-то они не указаны... либо что-то не загрузилось (дежавю)
Миниатюры
Android + GPS + SMS + PC  
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
11.07.2013, 16:20     Android + GPS + SMS + PC #34
Ох. Открой файл MainActivity и скопируй сюда строчки который Eclipse подчеркивает красным.
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
11.07.2013, 16:41  [ТС]     Android + GPS + SMS + PC #35
Сейчас, заново проект перепишу как в статье... А то я его так запарол что уже проще поновой написать.

Добавлено через 17 минут
Слова подчеркиваю...

Javascript
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package com.example.coomap;
 
 
import [U]android.app[/U].Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends [U]Activity [/U]implements [U]OnClickListener[/U], [U]LocationListener[/U]{
    [U]Button [/U]btn_find, btn_get;
    [U]EditText [/U]et1,et2;
    String x,y;
    public static final String MYLOG = "My logs";
    private [U]LocationManager[/U] locMan;
    private String provider;
    
    public static double latitude; //широта
    public static double longitude; //долгота
    @Override
    public void onCreate([U]Bundle[/U] savedInstanceState) {
        super.onCreate(savedInstanceState);
        [U]setContentView[/U](R.layout.activity_main);
        
        [U]btn_find[/U] = ([U]Button[/U]) findViewById(R.id.button1);
       [U] btn_find[/U].setOnClickListener(this);
        
        [U]btn_get[/U] = ([U]Button[/U]) findViewById(R.id.button2);
        [U]btn_get[/U].setOnClickListener(this);
        
        et1 = (EditText) findViewById(R.id.editText1);
        et2 = (EditText) findViewById(R.id.editText2);
        
        locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        provider = locMan.getBestProvider(criteria, false);
        Location location = locMan.getLastKnownLocation(provider);
        
        if (location!=null){
            onLocationChanged(location);
        }
        else 
        {
            Toast.makeText(getApplicationContext(), "Location unavailable", Toast.LENGTH_LONG).show();
        }
        
        
        Toast.makeText(getApplicationContext(),
                "LOCATION = "+location+"\nPROVIDER = "+provider,
                Toast.LENGTH_LONG).show();
    }
    public void onClick(View v) {
 
 
 
        Intent intent;
        x = et1.getText().toString();
        y = et2.getText().toString();
        
        switch(v.getId()){
        
        case R.id.button1:
            if (!x.equals("")&&!y.equals("")){
            intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setData(Uri.parse("geo:"+x+","+y));
            startActivity(intent);
            }
            break;
    
        case R.id.button2:
            et1.setText(latitude+"");
            et2.setText(longitude+"");  
            Toast.makeText(getApplicationContext(), "Клик", Toast.LENGTH_LONG).show();
            break;
        }
    
    }
    public void onLocationChanged(Location loc) {
        latitude = loc.getLatitude();
        longitude = loc.getLongitude(); 
    }
    public void onProviderDisabled(String provider) {
        Toast.makeText(getApplicationContext(), "GPS is disabled", Toast.LENGTH_LONG).show();//  не работает
    }
    public void onProviderEnabled(String provider) {
        Toast.makeText(getApplicationContext(), "GPS works", Toast.LENGTH_LONG).show();  //  работает
    }
    public void onStatusChanged(String provider, int status, Bundle extras) {
        
    }
    
    
    @Override
    protected void onPause() {
        super.onPause();
        locMan.removeUpdates(this);
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        locMan.requestLocationUpdates(provider, 400, 1, this);
    }
 
 
}
Добавлено через 20 секунд
Блин....

Добавлено через 57 секунд
У меня на каждой строке ошибки, на переменных, и других функциях... Сплошные подчеркивания =\
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
11.07.2013, 16:54     Android + GPS + SMS + PC #36
package com.example.coomap; - у тебя такой путь до файлов?

Погугли на тему импорта библиотек в eclipse. тебе надо импортировать android-support-v4.jar.
http://developer.android.com/tools/e...t-library.html
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
11.07.2013, 16:58  [ТС]     Android + GPS + SMS + PC #37
Тут я явно не загрузил какой-то компонент... и переменные все не определены... Но где я так налажал ? Я не знаю.

Добавлено через 2 минуты
Путь до файлов следующий: C:\AndroidDevelopment\workspace\GeoLocator-master\OSALocator

Добавлено через 1 минуту
Цитата Сообщение от haribo Посмотреть сообщение
package com.example.coomap; - у тебя такой путь до файлов?

Погугли на тему импорта библиотек в eclipse. тебе надо импортировать android-support-v4.jar.
http://developer.android.com/tools/e...t-library.html
я все возможные компонентов менеджере SDK отметил галочками и установил. Разве там нет того что нужно этому проекту ?
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
11.07.2013, 16:59     Android + GPS + SMS + PC #38
Это путь до проектов. Покажи путь до паки src
SERGEY199100
16 / 16 / 0
Регистрация: 29.10.2009
Сообщений: 425
11.07.2013, 17:03  [ТС]     Android + GPS + SMS + PC #39
Цитата Сообщение от haribo Посмотреть сообщение
Это путь до проектов. Покажи путь до паки src
C:\AndroidDevelopment\workspace\GeoLocator-master\OSALocator\src
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 17:03     Android + GPS + SMS + PC
Еще ссылки по теме:

Android Android SMS Manager
Android Gps speed
SMS-отправка Android
Android OpenGL на Android 4.4 и Android 5.0 - нет текстур
Android C++ Qt и java Android отправка SMS

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
11.07.2013, 17:03     Android + GPS + SMS + PC #40
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
я все возможные компонентов менеджере SDK отметил галочками и установил. Разве там нет того что нужно этому проекту ?
Прочитай что такое support library.
Yandex
Объявления
11.07.2013, 17:03     Android + GPS + SMS + PC
Ответ Создать тему
Опции темы

Текущее время: 10:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru