【问题标题】:(Android) Get latitude and longitude, always zero(Android) 获取经纬度,始终为零
【发布时间】:2016-11-22 04:13:16
【问题描述】:

我有一个问题,我需要获取某个特定时刻的纬度和经度,例如拍照。我得到了 Double 值,问题是它们总是 0。我没有收到任何异常,并且坐标已成功上传到 Firebase 数据库,但是当我在 JSON 中检查它们时,它们总是为零(我拍了 20 张照片)。

这是我的“位置”内容和上传到 Firebase 数据库的部分代码。

我的主要活动是这样的。

 public class MainActivity extends AppCompatActivity implements LocationListener

与位置相关的全局变量

 double latitude;
 double longitude;

这在 onCreate() 内部:

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
String networkProvider = LocationManager.NETWORK_PROVIDER;
String gpsProvider = LocationManager.GPS_PROVIDER;
final Location location= new Location(networkProvider);
onLocationChanged(location);{
     latitude=location.getLatitude();
     longitude=location.getLongitude();
}



if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
 locationManager.requestLocationUpdates(gpsProvider, 5000, 10, this);

这在一个按钮 onClickListener() 中,也在 onCreate() 方法中。

//Insert coordinates to JSON Firebase database...
   Coordinates coordinates = new Coordinates();
   coordinates.setLatitude(location.getLatitude());
   coordinates.setLongitude(location.getLongitude());
   testReference.push().setValue(coordinates);
   Toast.makeText(MainActivity.this, "Coordinates uploaded!", Toast.LENGTH_LONG).show();

我在 MainActivity 中也有这些方法:

@Override
    public void onLocationChanged(Location location) {

    }

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

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }

【问题讨论】:

  • 坐标如何成功上传到Firebase数据库。

标签: java android google-maps location latitude-longitude


【解决方案1】:

试试这个:

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


    Criteria locationCritera = new Criteria();
    String providerName = locationManager.getBestProvider(locationCritera,
            true);
    if(providerName!=null)
        location = locationManager.getLastKnownLocation(providerName);

    locationListener = new MyLocationListener();

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
            0, locationListener);

并实现您的位置侦听器类:

private class MyLocationListener implements LocationListener {

public void onLocationChanged(Location loc) {

  if (loc != null) {
        location = loc; 
        latitude=location.getLatitude();
        longitude=location.getLongitude();
    }
}

public void onProviderDisabled(String provider) {

}

public void onProviderEnabled(String provider) {
}

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

}

检查 getLastKnownLocation() 方法的空值..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多