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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 5.00
petruchodd
90 / 90 / 8
Регистрация: 23.06.2009
Сообщений: 511
#1

GPS Location (GPS_PROVIDER) как получить координаты - Программирование Android

11.09.2014, 13:35. Просмотров 5632. Ответов 17
Метки нет (Все метки)

Всем привет. Столкнулся с такой проблемой , может еще кто то сталкивался да знает что да как .
Вообщем тестя получение latitude и longtitude на эмуляторе - все прекрасно. Получает GPS coords сразу. Network_provider не пашет на эмуляторе. А на девайсе наоборот. GPS не пашет , а пашет network.

Создал себе прожку что бы вычислить же эти координаты. Но при попытке получить GPS Coords . Оно просто показывает что грузит и всё. Еще не разу не получил координаты gps
.Может кто сталкивался с таким - как его лечить. ?
права в манифесте
XML
1
2
3
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
 <uses-permission android:name="android.permission.INTERNET" />
сам код
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, getLocation.this);
@Override
        public void onLocationChanged(Location loc) {
            // TODO Auto-generated method stub =
            if(apress){
                at.setText("Lat = "+loc.getLatitude()+" | Long = "+loc.getLongitude());
                apress=false;
                Toast.makeText(MainActivity.this, "OnLocationChanged GPS" , Toast.LENGTH_SHORT).show();
                latG=loc.getLatitude();
                longG=loc.getLongitude();
                showA.setEnabled(true);
                handler.sendEmptyMessage(0);
            }
        }
я уже черт знает сколько постов перечитал на stackoverflow Это 100% должно работать. Но вот почему то просто висит и не показывает координаты.
На проверке включен ли GPS выдает положително. Так что всё должно быть нормально. Единственное - не понятно как получить координаты. :/

по своим наблюдениям - я никогда не попадаю в подкласс - onLocationChanged . Если делать всё это же через NETWORK_PROVIDER . Там всё работает( да я понимаю что это не то)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3143 / 1945 / 214
Регистрация: 13.01.2012
Сообщений: 7,437
11.09.2014, 13:45     GPS Location (GPS_PROVIDER) как получить координаты #2
в свое время делал так
XML
1
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
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
        private class MyListener implements LocationListener {
        @Override
        public void onLocationChanged(final Location location) {
            if (location != null) {
                update(location.getLatitude(), location.getLongitude());
            }
        }
        
        @Override
        public void onProviderDisabled(String provider) {}
        
        @Override
        public void onProviderEnabled(String provider) {}
        
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    }
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    ...
        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        if (lm != null) {
                Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                if (location == null) {
                    location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                }
                if (location != null) {
                update(location.getLatitude(), location.getLongitude());
                }
 
                lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new MyListener());
        }
    ...
    }
не могу сказать получалось ли лезть именно через GPS - по сравнению с NETWORK он как то глухо работал на том устройстве
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
11.09.2014, 13:46     GPS Location (GPS_PROVIDER) как получить координаты #3
Холодный старт gps может занимать 10-20 минут.
Рекомендую скачать эту тулзу:
https://play.google.com/store/apps/d...sstatus2&hl=ru
И посмотреть в ней, сколько доступных спутников находит. А уже потом пробовать получить координаты в своем приложении.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
11.09.2014, 18:11     GPS Location (GPS_PROVIDER) как получить координаты #4
petruchodd, согласен с Netscape, поиск спутников может занимать десятки минут.
Я использовал код отсюда: http://www.androidhive.info/2012/07/...ager-tutorial/
Проверяю, что GPS отдаёт данные, так:
Java
1
2
3
4
5
6
        gpsTracker = new GPSTracker(context);
        canDetectGPS = (gpsTracker.canGetLocation() && gpsTracker.getLocation() != null);
        if (canDetectGPS) {
            Log.i("*************", "latitude = " + gpsTracker.getLatitude());
            Log.i("*************", "longitude =" + gpsTracker.getLongitude());
        }
petruchodd
90 / 90 / 8
Регистрация: 23.06.2009
Сообщений: 511
11.09.2014, 18:29  [ТС]     GPS Location (GPS_PROVIDER) как получить координаты #5
эх спасибо ребята. но код везде один и тот же.. Я уже начинаю грешить на сам телефон.
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
11.09.2014, 21:22     GPS Location (GPS_PROVIDER) как получить координаты #6
Цитата Сообщение от petruchodd Посмотреть сообщение
эх спасибо ребята. но код везде один и тот же.. Я уже начинаю грешить на сам телефон.
Может поможет, когда то давно делал:

MainActivity

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
package app.app;
 
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
 
import java.io.IOException;
import java.io.UnsupportedEncodingException;
 
public class MainActivity extends Activity implements LocationListener {
 
    public HttpClient httpclient;
    public HttpResponse response;
    public HttpEntity resEntity;
    public HttpGet httpget;
    String lat;
    String lng;
    String acname;
    String actype;
    /**  TextView imei;
     TextView number;
     TextView lat;
     TextView lng;*/
    String imei;
    String number;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        imei=manager.getDeviceId();
 
        AccountManager am = AccountManager.get(this);
        Account[] accounts = am.getAccounts();
        for (Account ac : accounts) {
            acname = ac.name;
            actype = ac.type;
 
            if(actype.equals("com.whatsapp")){
                number=ac.name;
            }
        }
 
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
      //  finish();
    }
    /**
     private String getMyPhoneNumber(){
     TelephonyManager mTelephonyMgr;
     mTelephonyMgr = (TelephonyManager)
     getSystemService(Context.TELEPHONY_SERVICE);
     return mTelephonyMgr.getLine1Number();
     }
 
     private String getMy10DigitPhoneNumber(){
     String s = getMyPhoneNumber();
     return s.substring(2);
     }
     */
 
    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        //lat.setText((int) location.getLatitude());
        // lng.setText((int) location.getLongitude());
        lng=String.valueOf(location.getLongitude());
        lat=String.valueOf(location.getLatitude());
 
//if (lat==lat_new)
//{
        //   if (lng==lng_new)
//    {
 
        //}
//}
        //      else
//{
        new MySend().execute();
    }
 
    //  }
 
    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {
    }
    @Override
    public void onProviderEnabled(String s) {
    }
    @Override
    public void onProviderDisabled(String s) {
        turnGPSOn();
    }
 
    private void turnGPSOn(){
        String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if(!provider.contains("gps")){ //if gps is disabled
            final Intent poke = new Intent();
            poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
            poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
            poke.setData(Uri.parse("3"));
            sendBroadcast(poke);
        }
    }
 
    public class MySend extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
            String str0 = "error";
            try{
                httpclient = new DefaultHttpClient();
                httpget = new HttpGet("http://www.mysite.ru/gps.php?latitude="+lat+"&longitude="+lng+"&phoneID="+imei+"&TAG=1&phone="+number);
                response = httpclient.execute(httpget);
                resEntity = response.getEntity();
                if (resEntity != null) {
                    str0= EntityUtils.toString(resEntity);
                }
            } catch (UnsupportedEncodingException uee){
                uee.printStackTrace();
            } catch (ClientProtocolException cpe){
                cpe.printStackTrace();
            } catch (IOException ioe){
                ioe.printStackTrace();
            }
            return str0;
        }
    }
 
 
}
Работает как сервис. Оболочки по сути как таковой никакой не имеет. Просто отправляет данные на сервер. Получает номер телефона по вацапу. Думаю он у всех стоит)))) Включает GPS если выключено. Если не разберешься с gps.php поищу на компе скину.
petruchodd
90 / 90 / 8
Регистрация: 23.06.2009
Сообщений: 511
16.09.2014, 16:45  [ТС]     GPS Location (GPS_PROVIDER) как получить координаты #7
Вообщем. Отправлял приложение людям с андроидом.. (это было тяжко потому что у меня их еденицы)
У некоторых работает у некоторых нет. В USA GPS вообще себя показал хорошо.
Так что я пришел к выводу что на моем девайсе оно просто не работает. Коды 100% верные и рабочие :/
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
16.09.2014, 17:26     GPS Location (GPS_PROVIDER) как получить координаты #8
petruchodd, попробуйте на улицу выйти
petruchodd
16.09.2014, 17:52  [ТС]
  #9

Не по теме:

Цитата Сообщение от YuraAAA Посмотреть сообщение
попробуйте на улицу выйти
ну это уже очень смешно...

YuraAAA
16.09.2014, 17:55
  #10

Не по теме:

petruchodd, ну мало ли. А если серьёзно, то толстые стены будут очень большой помехой для GPS_PROVIDER

androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
27.03.2015, 15:40     GPS Location (GPS_PROVIDER) как получить координаты #11
petruchodd,
Цитата Сообщение от petruchodd Посмотреть сообщение
Так что я пришел к выводу что на моем девайсе оно просто не работает. Коды 100% верные и рабочие :/
Такая же ситуация(
Вы там таки не решили данную проблему?
petruchodd
90 / 90 / 8
Регистрация: 23.06.2009
Сообщений: 511
27.03.2015, 17:01  [ТС]     GPS Location (GPS_PROVIDER) как получить координаты #12
Цитата Сообщение от androbro Посмотреть сообщение
Такая же ситуация(
Вы там таки не решили данную проблему?
решил. всё работает. В комнате не работает) или через раз ловит плохой сигнал. Токо на улицу выхожу - сразу всё ок. Ума в тот момент не хватило оторватся от компа и пойти почекать на улице.

единственное конечно.. нужно делать запрос , что бы юзер включил. Некоторых это раздражает. В том числе и меня. Если gps выключен , то ничего и не покажет.
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
27.03.2015, 17:17     GPS Location (GPS_PROVIDER) как получить координаты #13
petruchodd, а я говорил
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 839
27.03.2015, 22:19     GPS Location (GPS_PROVIDER) как получить координаты #14
в моем случае как оказалось не хватало терпения))))
действительно очень большое время(порядка 7-10 минут) на "прогрев"
и никак его(время) не сократить как я понимаю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2015, 11:19     GPS Location (GPS_PROVIDER) как получить координаты
Еще ссылки по теме:
Android Подделать GPS координаты
Android Убрать диалог о включении GPS и иконку GPS. Тихий запуск GPS
Android Координаты GPS внутри service
Android Полные GPS координаты в мобильном
Android Сбросить координаты GPS при потере сигнала

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

Или воспользуйтесь поиском по форуму:
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
28.03.2015, 11:19     GPS Location (GPS_PROVIDER) как получить координаты #15
androbro, можно использовать A-GPS пока обычный GPS "прогревается"
Yandex
Объявления
28.03.2015, 11:19     GPS Location (GPS_PROVIDER) как получить координаты
Ответ Создать тему
Опции темы

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