我知道这个问题已被提出,但我无法让它发挥作用。
此代码会转到请求位置部分。我知道现在的设置是糟糕的选择,但我只是想获得结果我现在不关心手机电池。我可以在Eclipse调试器中看到
"libloc" - "Latitude: XXXXX"
"libloc" - "Longitude: XXXX"
"libloc" - "Accuracy: 27000"
这意味着GPS正在运行。但我无法获得实际位置,因为LocationListener
中的所有方法都没有触发。
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(loc==null){
String provider = null;
if ( lm.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
provider = LocationManager.GPS_PROVIDER;
} else {
Toast.makeText(this, "GPS not available", 3000).show();
if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
provider = LocationManager.NETWORK_PROVIDER;
} else {
Toast.makeText(this, "Provider Not available", 3000).show();
}
}
if(provider != null) {
lm.requestLocationUpdates(provider, 0, 0, locationListener);
}
} else {
Latitude = loc.getLatitude();
Longitude = loc.getLongitude();
}
这是我的位置侦听器对象,它被声明略低于顶部代码。正在调用这些方法的无(因此Log.d函数因此我可以添加断点,但在此侦听器中没有调用任何内容)。
double Latitude = 0.0;
double Longitude = 0.0;
LocationListener locationListener = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
Latitude = location.getLatitude();
Longitude = location.getLongitude();
}
@Override
public void onProviderDisabled(String provider) { Log.d("GPS", "HEY THERE"); }
@Override
public void onProviderEnabled(String provider) { Log.d("GPS", "HEY THERE"); }
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("GPS", "HEY THERE");
}
};
来自评论的其他信息:
事实并非如此。 loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);总是 返回null。 - Overload119 50分钟前
当您在IF中单步执行其余代码时会发生什么 声明? - 杰克44分钟前
我最终到达这一行:lm.requestLocationUpdates(provider,0, 0,locationListener);然后在调试器控制台消息中我可以看到 纬度,经度,准确性显示 - 及其反复显示, 所以我假设GPS已被激活并且它已经获得了 地点。问题是locationListener没有触发它的任何一个 方法。 - Overload119 41分钟前
我查看了链接,我的代码是一样的。 - 超载119分钟41分钟 之前提供商的价值是什么? - 杰克30分钟 前
提供者的价值是“gps” - 15分钟前Overload119 能够 你在onLocationChanged中设置一些断点来查看它是什么时候/是否 射击?如果您已经在运行应用程序之后完成了此操作 注册监听器后可能需要几秒钟 火。将手机移到一边等待。在某些时候它应该 反复射击。 - 杰克12分钟前
imm.io/8vXb这是一个截图 - 调试器显示GPS正在工作(请注意此事件 一遍又一遍地弹出)。我已经有了休息点 onLocationChanged() - 即使在等待之后它也永远不会到达它 延长的一段时间。它返回的纬度/经度始终是 同样如此。 - Overload119 39秒前编辑
我也试过打电话 lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);通过按钮, 并在控制台消息显示纬度/经度后单击它 收到了。 - 该方法返回的位置为null。 - Overload119 0秒前编辑
答案 0 :(得分:3)
我猜你的Location loc
始终由getLastKnownLocation()
设置,因此你的if语句永远不会评估为true
。你调试过,看看到底发生了什么:
Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(loc==null){ ... }
根据我的理解,您应该仅使用getLastKnownLocation()
来获取初始位置,然后注册您的听众以进行跟踪。
Here是您所需信息的绝佳链接。