Как получить GPS-координаты из GPS_PROVIDER с помощью LocationManager - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь получить широту и долготу от GPS в телефоне Android. Основная проблема в том, что я не могу получить его от этого конкретного провайдера, как бы я ни пытался. Но если я попробую другого провайдера (Сеть), я могу получить координаты просто отлично.

TLDR -> ПРОБЛЕМА: Я не могу получить Местоположение / координаты из GPS_PROVIDER на телефоне Android. Как мне их получить?

Я пробовал getLastKnownLocation(), requestSingleUpdate(...) и requestLocationUpdates(...). Кажется, что константа всех этих попыток заключается в том, что они работают с провайдером сети, но не работают с GPS_PROVIDER. RequestSingleUpdate и requestLocationUpdates не генерируют сообщения, а getLastKnownLocation возвращает NULL с GPS.

Я также уже попросил разрешения во время выполнения и поместил их в манифест.

В моем манифесте у меня есть по этому вопросу:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-feature android:name="android.hardware.location.gps" />

Это моя основная активность:

public class MainActivity extends AppCompatActivity {

    private LocationManager myManager;
    private MyLocListener loc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0);

        loc = new MyLocListener();
        myManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        if (myManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loc);
            }
        }
    }

    }

И мой слушатель:

public class MyLocListener implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {

        if (location != null) {
            Log.e("Latitude :", "" + location.getLatitude());
            Log.e("Longitude :", "" + location.getLongitude());
        }
    }
        @Override
        public void onProviderEnabled(String provider){

        }
        @Override
        public void onProviderDisabled(String provider){

        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras){

        }

    }

Таким образом, я не получаю никаких обновлений с помощью GPS, но, как я уже сказал, если я меняю провайдера на NETWORK, он работает просто отлично, и я периодически начинаю получать координаты на консоли времени выполнения.

Еще одна вещь, которую следует учитывать, это то, что я тестирую это без движения и внутри здания. Может быть, это как-то связано с этим ... Я не знаю

В любом случае, любая помощь или знания по этому поводу будут приветствоваться! СПАСИБО!

...