在android中实现经度和纬度细节

时间:2011-12-22 11:28:30

标签: android latitude-longitude

我正在创建一个应用程序,我必须获得设备的纬度和经度,我的代码如下:

mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    mlocListener = new MyLocationListener();
    mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3600, 0,  mlocListener);
    System.out.println("mlocManager"+mlocManager);
    String str = latitude + "," + longitude ;
    System.out.println("latitude"+latitude);
    System.out.println("longi:"+longitude);

}

public class MyLocationListener implements LocationListener
 {
    public void onLocationChanged(Location loc)
    {
        try 
        {
        System.out.println("............ ..............................Location changedin 11");
        latitude = loc.getLatitude();

        longitude = loc.getLongitude();
               // System.out.println("latitude"+curr_lat);

        System.out.println("longitude curr_lon");
        loc.getAccuracy();

                    }
        catch (Exception e1) {
            e1.printStackTrace();
        }

        }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }
    }

但最后我得到的是长期为0.0。任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

添加以下权限

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

您应该花些时间获取10秒,20秒等位置信息。为此您可以使用计时器。

我举了一个例子。你可以像这样实施。

private Location getCurrentLocation(){
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
        t.cancel();
        mLatitude = location.getLatitude();
        mLongitude =  location.getLongitude();
        myGeoPoint = GeoTools.makeGeoPoint(mLatitude, mLongitude);
        mapController.animateTo(myGeoPoint);

    }

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

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Location lastKnownLocation;
Timer t = new Timer();

    t.schedule(new TimerTask() {
                @Override
                public void run() {
                           this.cancel();
                           lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
                           if(lastKnownLocation==null){
                                     locationProvider = LocationManager.GPS_PROVIDER;
                                     // Or use LocationManager.GPS_PROVIDER

                             lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);   
                             return lastKnownLocation;


             }

    },30000);

}