2011-01-19 49 views
12

我需要获取当前用户在Android应用程序上的位置,所以我已经阅读了一些教程和Web上的示例,但我看到在所有示例中,位置都是从一个“onLocationChange”意味着每当位置改变时,“onLocationChange”中的代码就被执行。Android - 获取位置只有一次

我只需要在应用程序启动时获取用户位置。

感谢您的帮助!

回答

4

您可以使用LocationManager执行此操作。 getLastKnownLocation

+0

感谢您的回答,从您的链接看起来,我总是需要设置一个提供商......是吗?让我得到更好的提供者并将其设置在getLastKnownLocation中? – 2011-01-19 14:07:27

+0

是的,那是你需要做的。 – elevine 2011-01-19 14:23:04

1

在主活动将这个:


boolean bFirst = true; 
function void onCreate(blabla) { 
    if(bFirst) { 
    //Do your stuff to get the location 
    bFirst = false; 
    } 
} 

把相同的的onResume();

+0

这使得代码只执行一次,但条件测试不断被探测 – 2011-01-19 14:04:44

10

您可以使用下面的代码获取上一个已知位置。它获取位置提供者并向后遍历数组。即从GPS开始,如果没有GPS则获取网络位置。您可以在需要获取位置时调用此方法。

private double[] getGPS() { 
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
List<String> providers = lm.getProviders(true); 

/* Loop over the array backwards, and if you get an accurate location, then break     out the loop*/ 
Location l = null; 

for (int i=providers.size()-1; i>=0; i--) { 
l = lm.getLastKnownLocation(providers.get(i)); 
if (l != null) break; 
} 

double[] gps = new double[2]; 
if (l != null) { 
gps[0] = l.getLatitude(); 
gps[1] = l.getLongitude(); 
} 
return gps; 
} 
0

对于其火卫一的建议才能正常工作,你必须让你的AndroidManifest.xml

这将让你摆脱错误的接收0.0

添加这些行内访问getGPS()方法:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />