Я разрабатываю приложение для Android с использованием google maps api v2. Моя проблема в том, что setMyLocationEnabled (true) не отображает мою точную позицию. Мое приложение показывает неправильное местоположение, тогда как официальное приложение gmaps отображает мое правильное местоположение. Как такое возможно? Неправильно примерно на 600 метров. Я бы опубликовал скриншоты, но поскольку я новичок в stackoverflow, мне это не разрешено.

Вот мой MainActivity.java

package com.shanghai.powerplugs;

public class MainActivity extends FragmentActivity implements
    GooglePlayServicesClient.ConnectionCallbacks,
    GooglePlayServicesClient.OnConnectionFailedListener,
    com.google.android.gms.location.LocationListener {

        LocationManager myLocationManager = null;
        OnLocationChangedListener myLocationListener = null;
        Criteria myCriteria;

        GoogleMap map;
        MarkerOptions userMarker;
        LatLng userLocation;
        CheckBox mapSatellite;
        SupportMapFragment fm;
        Vibrator vib;
        String provider;
        LocationManager locationManager;




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

    GoogleMap map = ((SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map)).getMap();

    map.setMyLocationEnabled(true);
    //map.setTrafficEnabled(true);
    map.setMapType(GoogleMap.MAP_TYPE_NORMAL);

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    provider = locationManager.getBestProvider(criteria, true);

    Location location = locationManager.getLastKnownLocation(provider);
    if(location!=null){

    }else{
        provider = LocationManager.NETWORK_PROVIDER;
        location = locationManager.getLastKnownLocation(provider);
    }

    userMarker = new MarkerOptions();
    userLocation = new LatLng(location.getLatitude(), location.getLongitude());
    userMarker.position(userLocation);
    map.addMarker(userMarker);

    map.moveCamera(CameraUpdateFactory.newLatLng(userLocation));
    map.animateCamera(CameraUpdateFactory.zoomTo(15));



}

@Override
public void onConnectionFailed(ConnectionResult arg0) {
    // TODO Auto-generated method stub

}


@Override
public void onConnected(Bundle arg0) {

}

@Override
public void onDisconnected() {
    // TODO Auto-generated method stub

}

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

}

}

К вашему сведению, я только что узнал об этом, изменив map.setMapType (GoogleMap.MAP_TYPE_NORMAL); в map.setMapType (GoogleMap.MAP_TYPE_SATELLITE); расположение, наконец, подходящее .. Очень интересно!

1
Chiara Marello 4 Окт 2014 в 08:25

2 ответа

Лучший ответ

Я вижу, что вы внедряете GoolgePlayServicesClient. Почему ты им не пользуешься. Создайте объект LocationClient и получите через него местоположение.

 LocationClient mLocationClient = new LocationClient(this, this, this);
 Location mCurrentLocation = mLocationClient.getLastLocation();
 double clientLat = mCurrentLocation.getLatitude();
 double clientLng = mCurrentLocation.getLongitude();

Также в методе onLocationChanged вы можете получить доступ к Location. Всегда лучше получить последнее местоположение из этого метода.

0
Parikshit Singh Shekhawat 4 Окт 2014 в 06:05

Проверьте, включен ли GPS на устройстве. Больше информации в

Как программно включить или отключить GPS на Android?

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);
}

}

Private void turnGPSOff () {String provider = Settings.Secure.getString (getContentResolver (), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

if(provider.contains("gps")){ //if gps is enabled
    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);
}

}

0
Community 23 Май 2017 в 10:26