获取Android设备中的位置的问题

时间:2013-08-26 07:02:35

标签: android location

我遇到了一个问题,在Android设备中得到lat和long。 看看我的代码如下: -

public NewLocationActivity(final Context mContext) {

                locationManager = (LocationManager) mContext
                .getSystemService(Context.LOCATION_SERVICE);

                locationListener = new LocationListener() {

            public void onLocationChanged(Location location) {

            updateLocation(location);



                mSharedPreferences=mContext.getSharedPreferences(HomeSAFEPref.HomeSAFELocationPref,Context.MODE_PRIVATE);
                SharedPreferences.Editor prefEditor=mSharedPreferences.edit();

                String latitude=String.valueOf(currentLatitude);
                String longitude=String.valueOf(currentLongitude);
                String heading=String.valueOf(currentheading);
                String horizAccuracy=String.valueOf(currenthorizAccuracy);

                prefEditor.putString("Latitude", latitude);
                prefEditor.putString("Longitude", longitude);
                prefEditor.putString("Heading", heading);
                prefEditor.putString("HorizAccuracy", horizAccuracy);
                prefEditor.commit();

                }

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

   void  updateLocation(Location location) {
     currentLocation = location;
     this. currentLatitude = currentLocation.getLatitude();
     this. currentLongitude = currentLocation.getLongitude();

     geoField=new GeomagneticField(
            Double.valueOf(location.getLatitude()).floatValue(),
            Double.valueOf(location.getLongitude()).floatValue(),
            Double.valueOf(location.getAltitude()).floatValue(),
            System.currentTimeMillis()
         );

    this.currentheading=geoField.getInclination();
    this.currenthorizAccuracy=currentLocation.getAccuracy();
    this.speed=(int) currentLocation.getSpeed();
 }

当我创建NewLocationActivity类的对象时,构造函数可以工作。但是我的问题是UpdateLocation方法没有运行。为什么我不知道...但有时候在其他设备中它运行得很好而且我很容易得到lat和long。请让我知道为什么我得到拉特和长0,0.Thanks提前..

1 个答案:

答案 0 :(得分:1)

使用此代码:它从你的网站得到lat,很长。我也可以使用gps来获取lat,long。它是准确的但不会在建筑物内工作或者因为它们的接收能力而可能在某些设备中。最好的方法是使用两者并写入条件,如果gps lat,long为null则为wifi

public class NewLocationActivity extends Activity implements LocationListener {


    private LocationManager locationManager;

    /**
     * Called when the activity is first created.
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.digitalsignature);
            getLocation();

    }


    public String[] getLocation()
    {

        String[] locationArray=new String[2];


        locationManager = (LocationManager) DigitalSignatureActivity.this.getSystemService(LOCATION_SERVICE);
        // getting network status
        boolean  isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        // The minimum distance to change Updates in meters
        final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

        // The minimum time between updates in milliseconds
        final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

        if (isNetworkEnabled) {
            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER,
                    MIN_TIME_BW_UPDATES,
                    MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
            Log.d("Network", "Network");
            if (locationManager != null) {
                Location location = locationManager
                        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location != null) {
                    locationArray[0] = String.valueOf(location.getLatitude());
                    locationArray[1] = String.valueOf(location.getLongitude());

                }
            }
        }
        return locationArray;

    }


    /**
     * Stop using location listener
     * Calling this function will stop using location updates in your app
     * */
    public void stopUsingLocationUpdates(){
        if(locationManager != null){
            locationManager.removeUpdates(DigitalSignatureActivity.this);
        }      
    }


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

     }

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

    }

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

    }

     @Override
     public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    // TODO Auto-generated method stub

     }



}

也在清单声明中这样

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