12:38:542016-12-23 |
很多人经常遇到这种问题,主要是获取到位置的信息为null,第一个主要要有权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
第二个我们调用的方法是 Location location = locationManager.getLastKnownLocation(provider);
这个方法主要是获取上一次的经纬度信息,上一次的话肯定是空的啦。。这是要注册一下获取事件的监听器
等一会以后就可以拿到了经纬度了。。所以说一开始不要着急获取经纬度。。等待一会就有了。。不会报空指针异常。
LocationManager locationManager;
String serviceName = Context.LOCATION_SERVICE;
locationManager = (LocationManager) con.getSystemService(serviceName); // 查找到服务信息
//locationManager.setTestProviderEnabled("gps", true);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, mLocationListener01);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 0, mLocationListener01);
获取数据和监听器
* 通过location获取当前设备的具体位置
*
* @param location
* @param rowId
* @param params
* @param rowId
*/
private Location updateToNewLocation(Location location) {
System.out.println("--------zhixing--2--------");
String latLongString;
double lat = 0;
double lng=0;
if (location != null) {
lat = location.getLatitude();
lng = location.getLongitude();
latLongString = "纬度:" + lat + "\n经度:" + lng;
System.out.println("经度:"+lng+"纬度:"+lat);
} else {
latLongString = "无法获取地理信息,请稍后...";
}
if(lat!=0){
System.out.println("--------反馈信息----------"+ String.valueOf(lat));
}
Toast.makeText(getApplicationContext(), latLongString, Toast.LENGTH_SHORT).show();
return location;
}
// 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米
public final LocationListener mLocationListener01 = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
updateToNewLocation(location);
}
@Override
public void onProviderDisabled(String provider) {
updateToNewLocation(null);
}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
经过测试。。没有问题。。希望帮到你们。。。