安卓系统GPS定位

常用三种定位方式:

1.GPS定位: 基于电磁波传输,定位精准,室内可能接收不到信号,不依赖网络;   
2.网络定位(wifi):基于大数据,手机定位后的数据统计到运营商的数据库,数据可能会有延迟;  
3.基站定位:有手机信号就能定位,定位不精准,差的时候可能相差一两公里。

权限

<!-- gps定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 粗略定位 -->
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> -->
代码

public class MainActivity extends Activity {

	private static final String TAG = "MainActivity";
	//定位管理器
	private LocationManager mLocationManager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 初始化定位管理器
		mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
		 List<String> providers = mLocationManager.getProviders(false);
		 for (String provider : providers) {
		 		Log.d(TAG, provider);
		 }
	}
	
	@Override
	protected void onStart() {
		super.onStart();
		// 请求位置更新
		/**
		 * provider:提供者(定位方式)GPS_PROVIDER(gps定位)、NETWORK_PROVIDER(网络定位)、PASSIVE_PROVIDER(被动定位,依赖其他app的定位结果)
		 * minTime:定位时间间隔 单位毫秒,传0表示最大限度去定位 
		 * minDistance:下次定位需要经过的最小间隔
		 */
		mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0, mListener);
	}
	
	// 定位监听器
	private LocationListener mListener = new LocationListener() {
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// 定位状态改变(可用/临时不可用)
			Log.d(TAG, "onStatusChanged()");
		}

		@Override
		public void onProviderEnabled(String provider) {
			// 定位服务可用(设置-》位置服务-》打开定位)
			Log.d(TAG, "onProviderEnabled()");
		}

		@Override
		public void onProviderDisabled(String provider) {
			// 定位服务不可用(设置-》位置服务-》关闭定位)
			Log.d(TAG, "onProviderDisabled()");
		}

		@Override
		public void onLocationChanged(Location location) {
			// 定位到结果
			Log.d(TAG, "onLocationChanged()");
			//经纬度(121.518024,31.081642)
			double longitude = location.getLongitude();// 经度
			double latitude = location.getLatitude();// 维度
			Log.d(TAG, "经纬度(" + longitude + "," + latitude + ")");

			double altitude = location.getAltitude();// 海拔
			float speed = location.getSpeed();// 移动速度
			Log.d(TAG, "altitude = " + altitude + ", speed = " + speed);
		}
	};

	@Override
	protected void onDestroy() {
		super.onDestroy();
		// 停止定位
		mLocationManager.removeUpdates(mListener);
	}
}

总结:

用Gps模式,需要手动打开Gps,而用WIFI定位,不知为何没有出现结果。。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值