在Android中查找当前位置的纬度和经度[重复]
Posted
技术标签:
【中文标题】在Android中查找当前位置的纬度和经度[重复]【英文标题】:find current location latitude and longitude in Android [duplicate] 【发布时间】:2011-01-16 01:47:33 【问题描述】:我想在一个 android 应用程序中查找我当前位置的纬度和经度。我只是在手机稳定时才需要它。
我的代码是:
LocationManager locationManager;
locationManager = (LocationManager)getSystemService
(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation
(LocationManager.GPS_PROVIDER);
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,0,0,(LocationListener) this);
updateWithNewLocation(location);
private void updateWithNewLocation(Location location)
TextView myLocationText = (TextView)findViewById(R.id.myLocationText);
String latLongString;
if (location != null)
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
else
latLongString = "No location found";
myLocationText.setText("Your Current Position is:\n" +
latLongString);
在模拟器上运行它后,我总是发现“找不到位置”。为什么会这样?
【问题讨论】:
您能否向我们展示您的代码,以便我们了解它为什么不起作用?这个问题已经在 *** 上被问过很多次了。进行搜索,您可能已经找到问题的答案。 你不会从你的模拟器获得 GPS 。在真机上试试。 【参考方案1】:public class GPSmap extends Activity
GeoPoint geoPoint;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
LocationManager locManager;
setContentView(R.layout.main);
locManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L,
500.0f, locationListener);
Location location = locManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null)
double latitude = location.getLatitude();
double longitude = location.getLongitude();
private void updateWithNewLocation(Location location)
TextView myLocationText = (TextView) findViewById(R.id.text);
String latLongString = "";
if (location != null)
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
else
latLongString = "No location found";
myLocationText.setText("Your Current Position is:\n" + latLongString);
private final LocationListener locationListener = new LocationListener()
public void onLocationChanged(Location location)
updateWithNewLocation(location);
public void onProviderDisabled(String provider)
updateWithNewLocation(null);
public void onProviderEnabled(String provider)
public void onStatusChanged(String provider,int status,Bundle extras)
;
如果你会使用这个代码,你会得到答案。
【讨论】:
如果你会使用这个代码,你会得到答案......但没有接受......耻辱。【参考方案2】:GPS 收音机并非一直保持开启状态,因为它会严重耗尽电池电量。当您拨打getLastKnownLocation()
时,收音机可能已关闭。
您需要先执行您的requestLocationUpdates()
,然后等待向您的LocationListener
提供修复。在此之后的任何时间(直到你 removeUpdates()
),getLastKnownLocation()
应该返回一个非 null
值。
【讨论】:
“任何时候......直到你removeUpdates()
, getLastKnownLocation()
应该返回一个非空值” - 所以如果一个人调用 removeUpdates()
getLastKnownLocation()
返回的位置之后将是空的?比如说,它不会持续到重新启动吗?这是在某处记录的吗?
@Mr_and_Mrs_D: “所以如果调用 removeUpdates() 之后 getLastKnownLocation() 返回的位置将为空?” - 更多的是无法保证您将继续获得多长时间非null
值。 “这在某处有记录吗?” ——不,这就是重点。只有当您知道设备正在积极寻找位置数据时,您才能确信getLastKnownLocation()
有机会返回非null
数据。一旦你不再请求定位修复,所有的赌注都没有了。
a-ha - 因此,即使启用了提供程序 getLastKnownLocation()
也会在某个时间点后开始返回 null(我猜任何应用程序从上次请求位置更新时及时删除) - 任何讨论该问题的链接?有人会假设一旦获得最后一个位置,这将保持可用直到重新启动 - 或直到(所有?相关?)提供者禁用可能
@Mr_and_Mrs_D:“getLastKnownLocation() 将在某个时间点后开始返回 null”——同样,更多的是这种行为是未记录的,因此本质上是不可靠的。 “人们会假设一旦获得最后一个位置,这将保持可用直到重新启动 - 或者直到(所有?相关?)提供商可能被禁用” - 我当然不会假设。
谢谢 - 所以简而言之,javadoc 应该是“仅在(您或其他一些应用程序发出)调用 requestLocationUpdates()
之后调用此方法” - 顺便说一句,我今天发现了 this,它将为您节省一些打字时间:)【参考方案3】:
我搜索了很多教程,但找到了最好的一个:
使用Criteria
和BestProvider
/** PROCESS for Get Longitude and Latitude **/
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Log.d("msg", "GPS:"+isGPSEnabled);
// check if GPS enabled
if(isGPSEnabled)
/*
longitude = 70.80079728674089;
latitude = 22.29090332494221;
*/
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
//new LoadPlaces().execute();
//Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(location != null)
longitude = location.getLongitude();
latitude = location.getLatitude();
Log.d("msg", "first lat long : "+latitude +" "+ longitude);
//new LoadPlaces().execute();
else
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener()
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
// TODO Auto-generated method stub
@Override
public void onProviderEnabled(String provider)
// TODO Auto-generated method stub
@Override
public void onProviderDisabled(String provider)
// TODO Auto-generated method stub
@Override
public void onLocationChanged(Location location)
// TODO Auto-generated method stub
longitude = location.getLongitude();
latitude = location.getLatitude();
Log.d("msg", "changed lat long : "+latitude +" "+ longitude);
);
else
showAlertforGPS();
【讨论】:
【参考方案4】:默认情况下,模拟器可能没有任何关联的位置。所以它不给任何东西。
要发送位置,请转到 Eclipse 中的 DDMS 透视图,输入纬度和经度,然后单击发送。然后您将能够在您的应用程序中看到它。
如果您还有任何问题,请告诉我。
【讨论】:
以上是关于在Android中查找当前位置的纬度和经度[重复]的主要内容,如果未能解决你的问题,请参考以下文章