Невозможно получить текущее местоположение с картой Google - PullRequest
0 голосов
/ 07 сентября 2018

Я использую карту Google в проекте, где я хочу получить мое текущее местоположение, которое работает неправильно,

MyActivity.java код :

 LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        boolean enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        if (enabled) {
            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) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            Location location = locationManager.getLastKnownLocation(bestProvider);
            if (location != null) {
                lat = location.getLatitude();
                lng = location.getLongitude();
                return;
            }
        }

но он каждый раз возвращает ноль, сначала я хочу знать, в чем проблема и как лучше всего узнать мое текущее местоположение?

код AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
  <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />

Ответы [ 4 ]

0 голосов
/ 07 сентября 2018

Ну, вот как я это сделал в своем приложении:

Первое объявление:

private Location mylocation;
private GoogleApiClient googleApiClient;
private final static int REQUEST_CHECK_SETTINGS_GPS = 0x1;
private final static int REQUEST_ID_MULTIPLE_PERMISSIONS = 0x2;

public double latitude, longitude;

Затем в своем коде напишите:

implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener

Наконец,

if (googleApiClient.isConnected()) {
                LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        LocationRequest locationRequest = new LocationRequest();
        locationRequest.setInterval(3000);
        locationRequest.setFastestInterval(3000);
                locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                        .addLocationRequest(locationRequest);
         builder.setAlwaysShow(true);
         LocationServices.FusedLocationApi
                        .requestLocationUpdates(googleApiClient, locationRequest, this);
         PendingResult<LocationSettingsResult> result =
                        LocationServices.SettingsApi
                                .checkLocationSettings(googleApiClient, builder.build());
         result.setResultCallback(new ResultCallback<LocationSettingsResult>() {

                    @Override
                    public void onResult(LocationSettingsResult result) {
                        final Status status = result.getStatus();
                        switch (status.getStatusCode()) {
                            case LocationSettingsStatusCodes.SUCCESS:
                                    mylocation = LocationServices.FusedLocationApi
                                            .getLastLocation(googleApiClient);
                                    latitude = mylocation.getLatitude();
                                    longitude = mylocation.getlongitude();
                                }
                                break;
                    }
             }
       }

Попробуйте это, надеюсь, это работает. }

0 голосов
/ 07 сентября 2018

Здесь вы можете найти документацию о том, как использовать Location Data из Google Maps -> https://developers.google.com/maps/documentation/android-sdk/location

И здесь вы можете найти, как получить последнее известное местоположение (это может быть null, если ваше устройство использует его впервые и пока оно не было сохранено) -> https://developer.android.com/training/location/retrieve-current#java

0 голосов
/ 07 сентября 2018
private static final int REQUEST_LOCATION = 1;
private LocationManager locationManager;
//...

// In your onCreate
locationManager = (LocationManager) 
this.getSystemService(Context.LOCATION_SERVICE);

//...

void getLocation() {
    if (ActivityCompat.checkSelfPermission(this,
            android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(this,
                    android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

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

    } else {

        Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        if (location != null) {
            double lati = location.getLatitude();
            double longi = location.getLongitude();

            Geocoder geocoder = new Geocoder(this, Locale.getDefault());
            try {

             //You can retrieve any address you want like this...
                List<Address> addresses = geocoder.getFromLocation(lati, longi, 1);
                String address = addresses.get(0).getAdminArea() + ", " + addresses.get(0)
                        .getCountryName();

                location_text.setText(address);
                System.out.println(address);

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

//Create the location request and set the parameters
//To store parameters for requests to the fused location provider, create a LocationRequest.
// The parameters determine the level of accuracy for location requests.
//Create the location request and set the parameters
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {
        case REQUEST_LOCATION:
            getLocation();
            break;
    }
}
0 голосов
/ 07 сентября 2018

Используйте этот метод Google Map API v2

private void getCurrentLocation() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            mMap.setMyLocationEnabled(true);
            // Check if we were successful in obtaining the map.
            if (mMap != null) {


             mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {

           @Override
           public void onMyLocationChange(Location arg0) {
            // TODO Auto-generated method stub

             mMap.addMarker(new MarkerOptions().position(new LatLng(arg0.getLatitude(), arg0.getLongitude())).title("It's Me!"));
           }
          });

            }
        }
    }
...