【发布时间】:2012-11-26 15:06:12
【问题描述】:
首先我为重复道歉,我知道有人问过这个问题,我试图跟进现有的答案,但它不起作用。因此,如果您能看到我的代码并说出错误或缺失的地方,那将对我有很大帮助。
这是活动,它仅使用日志(无 GUI)。
import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity implements LocationListener {
private LocationManager lManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (lManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
lManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
0, 0, this);
else
Log.i("Test", "network provider unavailable");
Location lastKnownLocation =
lManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (lastKnownLocation != null) {
Log.i("Test", lastKnownLocation.getLatitude() + ", "
+ lastKnownLocation.getLongitude());
lManager.removeUpdates(this);
} else
Log.i("Test", "null");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void onLocationChanged(Location location) {
Log.i("Test", "location changed: " + location.getLatitude() + ", "
+ location.getLongitude());
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
当我尝试运行应用程序时,一切似乎都正常,但纬度和经度不会显示在日志上。我正在使用具有网络位置的真实设备进行测试。
【问题讨论】:
-
您的代码看起来不错。 (微小的变化:如果有最后一个已知位置,我会询问是否有最后一个已知位置,然后才请求更新,而不是请求更新然后可能会取消更新。)您可能无法获得位置因为信号弱,网络过时,或者你没有等待足够长的时间......你也尝试过GPS吗?
-
我没有尝试 GPS,因为据说它比网络慢,而且我不需要它提供的精度。此外,我需要将室内的设备连接到 PC 以进行测试和查看日志。我有点希望它可以通过网络完成,我已经等了很长时间。需要多长时间?
-
在理想情况下,获取位置应该只需要几分钟,如果需要的时间超过几分钟,那么您不太可能收到信号。 (我必须走到外面才能解决问题……)考虑使用模拟位置进行测试。
-
获取纬度和经度的过程需要3到5秒,并且您在获取这些项目之前删除了Listener,我认为您必须延迟删除listener的过程才能获取经纬度
-
@Husam A. Al-ahmadi 谢谢,我确实将 getLastKnownLocation 调用放在了 Sam 最终提供的 requestLocationUpdates 调用之前,这也解决了这个问题。但是感谢您向我展示了这一点。
标签: android gps location locationmanager android-location