Android GPS和Network定位

冷正青
2023-12-01

GPS和Network定位各有优劣:

GPS定位精确,但耗电耗时;Network则相反,低能耗且定位迅速,但定位误差较大。

非导航类的,一般用Network定位已经足够了。

开启定位服务:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);


设置一个监听:

LocationListener listener = new LocationListener() {

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

		}

		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onLocationChanged(Location location) {
			// TODO Auto-generated method stub
			if (location != null) {
				latitude = location.getLatitude();
				longitude = location.getLongitude();

				Log.i("latitude", String.valueOf(latitude));
				Log.i("longitude", String.valueOf(longitude));
				locationText.setText("latitude:" + String.valueOf(latitude)
						+ "\n" + "longitude:" + String.valueOf(longitude));
			}
		}
	};

然后设置更新定位:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);

方法详解:

public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)

Added in API level 1

Register for location updates using the named provider, and a pending intent.

Parameters

providerthe name of the provider with which to register
minTimeminimum time interval between location updates, in milliseconds
minDistanceminimum distance between location updates, in meters
listenera LocationListener whose onLocationChanged(Location) method will be called for each location update
(第一个参数是选择Network来定位,用GPS定位的话是GPS_PROVIDER;第二个参数是更新时间,0的话代表尽可能多的刷新;第三个参数是位移距离刷新,你移动了多少米后,会调用该方法;第四额参数就是之前设置的监听器了)


最后添加权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
这个代表获取设备的大概位置,如果使用GPS定位或两者结合定位,则用下面的精确定位权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />



这里大概说一下,定位之前还有判断用户的网络或GPS是否打开,没有的话还要引导用户去打开相应的设置才行。网络的话,一般都是打开的,所以我没做判断。判断的方法如下:

locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

判断GPS:

locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)

将会返回一个Boolean值,TRUE代表已打开相应的设置,FALSE的话,就去设置吧!


 类似资料: