简体   繁体   English

Android当前GPS位置不正确

[英]Android current gps location incorrect

I'm testing current gps location application using samsung spica 1.5 but it doesn't display my current location it just shows me another location. 我正在使用三星spica 1.5测试当前的gps位置应用程序,但它不会显示我的当前位置,而只是显示另一个位置。

Here is my code: 这是我的代码:

public class MaptestActivity extends MapActivity implements LocationListener {
     private MapView mapView = null;
        private LocationManager lm = null;
        private double lat = 0;
        private double lng = 0;
        private MapController mc = null;
        private MyLocationOverlay myLocation = null;
        private String current;
        private PositionMarkersList positionMarkersList = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mapView = (MapView) this.findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);

        lm = (LocationManager) this.getSystemService(LOCATION_SERVICE);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 0, this);

        mc = mapView.getController();
        mc.setZoom(15);





        myLocation = new MyLocationOverlay(getApplicationContext(), mapView);
        myLocation.runOnFirstFix(new Runnable() {       
            public void run() {
            mc.animateTo(myLocation.getMyLocation());
            mc.setZoom(17);


            }

        }); 

        mapView.getOverlays().add(myLocation);
        GeoPoint pp=myLocation.getMyLocation();

        //addPosition(pp); 
        if (myLocation.isMyLocationEnabled()!=false)
        {
            GeoPoint p =myLocation.getMyLocation();
            lat= p.getLatitudeE6();
            lng= p.getLongitudeE6();
            Toast.makeText(getBaseContext(),
                     "geolocalisation activÈ lat: "+lat+ " long: " +lng,
                     Toast.LENGTH_SHORT).show();
        }
        else
        {

            Toast.makeText(getBaseContext(),
                     "geolocalisation desactivÈe" ,
                     Toast.LENGTH_SHORT).show();
        }



        }

        @Override
        protected void onResume() {
        super.onResume();
        myLocation.enableMyLocation();
        myLocation.enableCompass();
        }

        @Override
        protected boolean isRouteDisplayed() {
        return false;
        }

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_S) {
            mapView.setSatellite(!mapView.isSatellite());
            return true;
        }
        return super.onKeyDown(keyCode, event);
        }

        public void onLocationChanged(Location location) {
        lat = location.getLatitude();
        lng = location.getLongitude();
        Toast.makeText(
            getBaseContext(),
            "Location change to : Latitude = " + lat + " Longitude = "
                + lng, Toast.LENGTH_SHORT).show();
        GeoPoint p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
        mc.animateTo(p);
        mc.setCenter(p);
        }

        public void onProviderDisabled(String provider) {
        }

        public void onProviderEnabled(String provider) {
        }

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


 //ajout d'une position

        private void addPosition(GeoPoint geoPoint) {
            OverlayItem overlayitem = new OverlayItem(geoPoint, current, current);
            positionMarkersList.addMarker(overlayitem);
        }

}

Does anyone have any idea about this please? 请问有人对此有任何想法吗?

When I click run to test the app, I have list of means to test (virtual devices ...) but there is a "!" 当我单击“运行”以测试该应用程序时,我具有要测试的方式列表(虚拟设备...),但其中有一个“!” near the name of the phone and I don't know why. 靠近电话的名字,我也不知道为什么。

Thanks! 谢谢!

public Location getCurrentLocation() {
    try {

        LocationManager lm = (LocationManager)     getSystemService(Context.LOCATION_SERVICE);
        // ---Get the status of GPS---
        boolean isGPS = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

        // If GPS is not enable then it will be on
        if (!isGPS) {
            Intent intent = new Intent(
                    "android.location.GPS_ENABLED_CHANGE");
            intent.putExtra("enabled", true);
            sendBroadcast(intent);
        }

        Location location = lm
                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location == null) {
            location = lm
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        }
        return location;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

You have to make a virtual device with Google API. 您必须使用Google API制作虚拟设备。

Also, where your device location is displayed, may I know how far the displayed location on the map is from your current location? 另外,在显示您的设备位置的位置上,我是否可以知道地图上显示的位置与您当前的位置有多远?

make sure to include, the right permissions for location services in your AndroidManifest.xml!!! 确保在AndroidManifest.xml中包含对位置服务的正确权限!!!!

GPS: ACCESS_FINE_LOCATION GPS:ACCESS_FINE_LOCATION

WIFI: ACCESS_COARSE_LOCATION WIFI:ACCESS_COARSE_LOCATION

All permissions: can be found here 所有权限: 可在此处找到

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM