Очень длинный поиск местоположения GPS - PullRequest
0 голосов
/ 04 июня 2018

Я пишу приложение, которое получает местоположение пользователя с помощью GPS.Я добавил разрешение для манифеста (android.permission.ACCESS_FINE_LOCATION), запросил необходимые разрешения времени выполнения и заставил мое приложение начать поиск, но этот поиск может занять очень много времени (около 5 минут) или длиться вечно, не возвращая никакого результата.Но оригинальное приложение Google Maps мгновенно определяет мое местоположение, поэтому проблема не в GPS.Может кто знает в чем проблема?

Вот мой код:

public class MainActivity extends AppCompatActivity
    implements ActivityCompat.OnRequestPermissionsResultCallback {

private static final int PERMISSION_REQUEST_GPS = 0;

LocationManager manager;

private LocationListener listener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            String lathitude = String.valueOf(location.getLatitude());
            String longitude = String.valueOf(location.getLongitude());
            Toast.makeText(getApplicationContext(),
                    "Your Location is - \nLat: " + lathitude + "\nLong: " + longitude,
                    Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(),
                    "Sorry, location unavailable",
                    Toast.LENGTH_LONG).show();
        }
    }

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

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }
};

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

    findViewById(R.id.btnShowLocation).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            findGPSLocation();
        }
    });
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    if (requestCode == PERMISSION_REQUEST_GPS) {
        // Request for camera permission.
        if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Permission has been granted.
            startGPSSearch();
        } else {
            // Permission request was denied.
        }
    }
}

private void findGPSLocation() {
    // Check if the Camera permission has been granted
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        // Permission is already available
        startGPSSearch();
    } else {
        // Permission is missing and must be requested.
        requestPermission();
    }
}

private void requestPermission() {
    // Permission has not been granted and must be requested.
    ActivityCompat.requestPermissions(MainActivity.this,
            new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
            PERMISSION_REQUEST_GPS);
}

private void startGPSSearch() {
    manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
}
    }

1 Ответ

0 голосов
/ 04 июня 2018

Вы запрашиваете местоположение GPS, это означает, что android ожидает от GPS спутниковых данных.Если вы тестируете свой код внутри сборки, это может оказаться невозможным или может занять больше времени.Карты Google (скорее всего) используют API-интерфейсы для определения местоположения, которые используют множество различных источников местоположения, но при этом обеспечивают точность местоположения, так что вы можете решить, достаточно ли точности для ваших нужд (карты Google показывают эту точность при увеличении/ меньший круг вокруг вашей позиции).

Чтобы использовать API с привязанным местоположением, начните здесь: https://developers.google.com/location-context/fused-location-provider/

Вы можете запросить обновления местоположения в сети, добавив:

manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);

см.здесь: https://developer.android.com/guide/topics/location/strategies

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...