google 定位

网上摘的,可以用,这里仅作记录。

1.工具类代码如下:

/**
 * 通过GPS或网络获取地理位置
 */
public class LocationUtils {

	private FragmentActivity mFragmentActivity;

	private Handler mHandler;
	private LocationManager mLocationManager;

	public static final int UPDATE_ADDRESS = 1;
	public static final int UPDATE_LATLNG = 2;

	private static final int TEN_SECONDS = 10000;
	private static final int TEN_METERS = 10;
	private static final int TWO_MINUTES = 1000 * 60 * 2;

	private static LocationUtils mLocationUtils;

	public static LocationUtils getInstance(FragmentActivity fragmentActivity, Handler handler) {
		return mLocationUtils == null ? new LocationUtils(fragmentActivity, handler) : mLocationUtils;
	}

	private LocationUtils(FragmentActivity fragmentActivity, Handler handler) {
		this.mHandler = handler;
		this.mFragmentActivity = fragmentActivity;

		mLocationManager = (LocationManager) mFragmentActivity.getSystemService(Context.LOCATION_SERVICE);

	}

	private LocationUtils() {
	}

	// Method to launch Settings
	private void enableLocationSettings() {
		Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
		mFragmentActivity.startActivity(settingsIntent);
	}

	// Stop receiving location updates whenever the Activity becomes invisible.
	public void stop() {
		mLocationManager.removeUpdates(listener);
	}

	public void setup() {

		Location networkLocation = null;

		mLocationManager.removeUpdates(listener);

		networkLocation = requestUpdatesFromProvider(LocationManager.NETWORK_PROVIDER, R.string.common_not_open_google_location_service);

		if (networkLocation != null) {
			updateUILocation(networkLocation);
		}

	}

	private Location requestUpdatesFromProvider(final String provider, final int errorResId) {
		Location location = null;
		if (mLocationManager.isProviderEnabled(provider)) {
			mLocationManager.requestLocationUpdates(provider, TEN_SECONDS, TEN_METERS, listener);
			location = mLocationManager.getLastKnownLocation(provider);
		} else {
			new EnableGpsDialogFragment().show(mFragmentActivity.getSupportFragmentManager(), mFragmentActivity.getResources().getString(errorResId));
		}
		return location;
	}

	private void doReverseGeocoding(Location location) {
		(new ReverseGeocodingTask(mFragmentActivity)).execute(new Location[] { location });
	}

	private void updateUILocation(Location location) {

		Message.obtain(mHandler, UPDATE_LATLNG, location).sendToTarget();

		doReverseGeocoding(location);
	}

	private final LocationListener listener = new LocationListener() {

		@Override
		public void onLocationChanged(Location location) {
			updateUILocation(location);
		}

		@Override
		public void onProviderDisabled(String provider) {
		}

		@Override
		public void onProviderEnabled(String provider) {
		}

		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
		}
	};

	protected Location getBetterLocation(Location newLocation, Location currentBestLocation) {
		if (currentBestLocation == null) {
			return newLocation;
		}

		long timeDelta = newLocation.getTime() - currentBestLocation.getTime();
		boolean isSignificantlyNewer = timeDelta > TWO_MINUTES;
		boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES;
		boolean isNewer = timeDelta > 0;

		if (isSignificantlyNewer) {
			return newLocation;
		} else if (isSignificantlyOlder) {
			return currentBestLocation;
		}

		int accuracyDelta = (int) (newLocation.getAccuracy() - currentBestLocation.getAccuracy());
		boolean isLessAccurate = accuracyDelta > 0;
		boolean isMoreAccurate = accuracyDelta < 0;
		boolean isSignificantlyLessAccurate = accuracyDelta > 200;

		boolean isFromSameProvider = isSameProvider(newLocation.getProvider(), currentBestLocation.getProvider());

		if (isMoreAccurate) {
			return newLocation;
		} else if (isNewer && !isLessAccurate) {
			return newLocation;
		} else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) {
			return newLocation;
		}
		return currentBestLocation;
	}

	/** Checks whether two providers are the same */
	private boolean isSameProvider(String provider1, String provider2) {
		if (provider1 == null) {
			return provider2 == null;
		}
		return provider1.equals(provider2);
	}

	private class ReverseGeocodingTask extends AsyncTask<Location, Void, Void> {
		Context mContext;

		public ReverseGeocodingTask(Context context) {
			super();
			mContext = context;
		}

		@Override
		protected Void doInBackground(Location... params) {
			Geocoder geocoder = new Geocoder(mContext, Locale.getDefault());

			Location loc = params[0];
			List<Address> addresses = null;
			try {
				addresses = geocoder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1);
			} catch (IOException e) {
				e.printStackTrace();
				Message.obtain(mHandler, UPDATE_ADDRESS, e.toString()).sendToTarget();
			}
			if (addresses != null && addresses.size() > 0) {
				Address address = addresses.get(0);
				Message.obtain(mHandler, UPDATE_ADDRESS, address).sendToTarget();

			}
			return null;
		}
	}

	/**
	 * Dialog to prompt users to enable GPS on the device.
	 */
	private class EnableGpsDialogFragment extends DialogFragment {

		@Override
		public Dialog onCreateDialog(Bundle savedInstanceState) {
			return new AlertDialog.Builder(getActivity()).setTitle(R.string.common_error).setMessage(R.string.common_not_open_google_location_service)
					.setPositiveButton(R.string.common_open_google_location_service, new DialogInterface.OnClickListener() {// Enable
								// GPS
								@Override
								public void onClick(DialogInterface dialog, int which) {
									enableLocationSettings();
								}
							}).create();
		}
	}

}

2.使用实例:

LocationUtils instance = LocationUtils.getInstance(activity, handler);
instance.setup();
	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case LocationUtils.UPDATE_ADDRESS:

				if (msg.obj instanceof Address) {

					Address address = (Address) msg.obj;

					double longitude = address.getLongitude();
					double latitude = address.getLatitude();

				}
				instance.stop();
				break;
			case LocationUtils.UPDATE_LATLNG:
				instance.stop();
				break;
			}
		}

	};


利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值