如何在android应用程序中获取当前位置?
Posted
技术标签:
【中文标题】如何在android应用程序中获取当前位置?【英文标题】:How to get current location in android app? 【发布时间】: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 调用之前,这也解决了这个问题。但是感谢您向我展示了这一点。 【参考方案1】:我无法获得位置的原因是蜂窝公司没有提供该信息(NETWORK_PROVIDER 使用蜂窝天线三角测量来确定位置。蜂窝公司可以提供或拒绝您提供此信息)。
【讨论】:
以上是关于如何在android应用程序中获取当前位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 中使用 gps 获取当前位置(街道、城市等)