无法通过GPS获取位置:Android

时间:2012-08-19 16:31:50

标签: android android-location

我是android新手。我正在尝试使用GPS获取我的位置。 我已经包含了权限:

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

每当我尝试使用LocationLocationManager获取getLastKnownLocation时,我都会获得空对象。此外,GPS已启用。这是我的代码:

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Location location;
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    Log.d("ManualLog", "GPS_DISABLED");
    Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(settingsIntent);
} else {
    Log.d("ManualLog", "GPS_ENABLED");
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}

3 个答案:

答案 0 :(得分:2)

如果GPS还没来得及修复,那么

locationManager.getLastKnownLocation将返回null。 Android不提供“现在给我位置”的方法。当GPS得到修复后,onLocationChanged()将运行。它是事件驱动,您必须耐心等待该事件。一旦onLocationChanged()运行,getLastKnownLocation()将返回一个非空值。

答案 1 :(得分:0)

尝试通过以下方式替换最后一行:

List<String> providers = locationManager.getProviders(true);
if(!providers.isEmpty()) {
    location = locationManager.getLastKnownLocation(providers.get(0));
} else {
   Log.d("ManualLog", "No provider");
}

答案 2 :(得分:0)

您是在模拟器或设备上运行它吗? 如果在仿真器上,您可能需要通过“仿真器控制”手动将GPS数据发送到仿真器。在eclipse中,你可以找到它Window&gt; Open Perspective&gt; DDMS。

如果您在设备上运行,您的设备之前是否可能从未收到GPS信号?