LocationManager Android自动定位使用以及注意事项(个人)

先上局部代码

	/**
	 * android 定位
	 */
	void initGoogleLocation() {
		if (locationListener == null) {
			locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
			if (locationManager == null) {
				return;
			}
			Location lastlocation = locationManager
					.getLastKnownLocation(LocationManager.GPS_PROVIDER);

			if (lastlocation != null) {
				BMapApiApplication.userVo.setLatitude((int) (lastlocation
						.getLatitude() * 1e6));
				BMapApiApplication.userVo.setLongitude((int) (lastlocation
						.getLongitude() * 1e6));
			}
			locationListener = new android.location.LocationListener() {

				@Override
				public void onLocationChanged(Location location) {
					// TODO Auto-generated method stub
					Log.i(BMapApiApplication.SOFTNAME, "location");
					if (location != null) {
						/**
						 * 定位解析以及处理
						 */
						iBinder.sendPacket(new LocationPacket(location, iBinder));
					}
				}

				@Override
				public void onProviderDisabled(String provider) {
					// TODO Auto-generated method stub
					locationManager.requestLocationUpdates(
							LocationManager.NETWORK_PROVIDER, location_time,
							20, locationListener);
					Log.i(BMapApiApplication.SOFTNAME, provider);
				}

				@Override
				public void onProviderEnabled(String provider) {
					// TODO Auto-generated method stub
					locationManager.requestLocationUpdates(
							LocationManager.GPS_PROVIDER, location_time, 20,
							locationListener);
					Log.i(BMapApiApplication.SOFTNAME, provider);
				}

				@Override
				public void onStatusChanged(String provider, int status,
						Bundle extras) {
					// TODO Auto-generated method stub

				}

			};
			/**
			 * 请求定位
			 */
			locationManager.requestLocationUpdates(
					LocationManager.GPS_PROVIDER, location_time, 20,
					locationListener);
		} else {
			if (locationManager != null) {
				locationManager.removeUpdates(locationListener);
				locationListener = null;
			}
		}
	}
此代码为目前使用正常,不过有时候 怎么都不能触发,后来发现重启手机即可,具体原因不详。

注意事项:我一请求就是GPS,而不是网络,经调试发现,如果开始请求为网络,如果软件中途开启GPS,则不能监听到GPS的开启,所以需要先GPS监听无GPS后启用网络,而如果再开启GPS的话还是能监听到的再转换GPS监听位置。网络定位经常不是受参数影响,说是 最小时间最小距离,就是说 有可能大于这个距离与时间,,网络定位无论怎么请求都不会有,它自动在大于这个参数时间距离 后随机触发,GPS的话就是根据参数来的

你可能感兴趣的:(android)