ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATON都已包含在清单中。活动中还包括:
import android.location.Location;
import android.location.LocationManager;
我有一个带有以下类
的导航抽屉的监听器private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null)
{
final double longitude = location.getLongitude();
final double latitude = location.getLatitude();
}
selectItem(position);
}
}
由此location = null
,因此location.getLongitude();
失败。我当然可以使用if (location != null)
来避免这种情况,但我希望找到lat
和long
。
为什么位置始终为空?
答案 0 :(得分:1)
在硬件方面找到位置并不是一件容易的事。您无法告诉设备我想知道我的位置,所以现在就把它给我!它需要观察GPS卫星的一些数据,如果外面有清晰的可见性,否则它使用其他可用选项,如wifi。直到您的设备提出有效位置,您应该等待。我建议您观察onLocationChanged
事件并在发生此事件时更新列表视图。最好使用null
条件,直到它检测到您的位置。