即使设备没有移动,我也希望得到设备的当前纬度和经度。
尝试了requestLocationUpdates()
和requestSingleUpdate()
,但我的位置仍为空。似乎只有在位置发生变化时才会调用LocationManager.onLocationChanged()
。我想发布此位置详细信息,但每次都失败并显示NullPointerException
。
以下是我的代码示例:
活动:
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLocationListener);
if (location == null) {
try {
locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, myLocationListener, Looper.myLooper());
} catch (SecurityException e) {
}
}
//MyLocationListener
public void onLocationChanged(Location location) {
activity.setLocation(location);
}
}
}
清单:
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
答案 0 :(得分:1)
如果用户暂时没有使用GPS,则没有最后的已知位置,因此除非您搬到外面,否则GPS提供商根本不会更新。最好使用新的FusedLocationApi来获取更新,因为它为您选择最佳来源并为您提供最佳位置。
https://developer.android.com/training/location/receive-location-updates.html
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
答案 1 :(得分:0)
尝试将代码放入AsyncTask。