Приложение GPS Location работает в первый раз, но после второй попытки оно не может найти мою долготу и широту - PullRequest
0 голосов
/ 09 марта 2020

это просто простой локатор GPS, который показывает мне долготу и широту. Однако, когда я запускаю приложение в первый раз, все работало, но после того, как я включил и отключил GPS на своем мобильном телефоне, он не смог отследить меня, и мой объект Location (lo c) был нулевым. Это становится еще более забавным, потому что я установил поддельное приложение GPS, и я установил его в другой стране, и мое приложение показало мне долготу и долготу от этой поддельной страны GPS. Я попытался переустановить свое приложение, но затем первый запуск снова стал нулевым, и приложение не смогло отследить мой GPS. Это проблема с моим кодом или слабый сигнал GPS от моего местоположения, где я живу?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}


public void getLoc(View v) {

    TextView txtLong = findViewById(R.id.textViewLong);
    TextView txtLat = findViewById(R.id.textViewLat);
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    Criteria criteria = new Criteria();

    String bestProvider = locationManager.getBestProvider(criteria, true);


    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    Location loc = locationManager.getLastKnownLocation(bestProvider);

    if (loc == null){
        Toast.makeText(getApplicationContext(), "GPS signal not found", Toast.LENGTH_SHORT).show();

    }
    if(loc != null){
        txtLong.setText("Longitude: " + loc.getLongitude());
        txtLat.setText("Latitude: " + loc.getLatitude() );
    }
    if(loc == null) {
        txtLong.setText("loc is = null!");
    }


}

1 Ответ

0 голосов
/ 09 марта 2020

Не используйте getLastKnownLocation таким образом. Это ненадежно или должно быть надёжно. Может иметь значение, но значение истекает и часто возвращает ноль - оно возвращает ноль больше, чем что-либо еще на самом деле. Если вам нужно получить местоположение, используйте requestSingleUpdate или requestLocationUpdates.

getLastKnownLocation можно использовать в качестве оптимизации, чтобы получить местоположение на секунду или две быстрее , если система уже знает это. Его нельзя использовать ни для чего другого.

...