Android入门之GPS定位详解

一、LocationManager

LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。

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


二、LocationListener

LocationListener,位置监听,监听位置变化,监听设备开关与状态。

//定义
LocationListener locationListener=new LocationListener(){
	//位置信息变化时触发
	public void onLocationChanged(Location location) {
		system.out.println("时间:"+location.getTime());
		system.out.println("经度:"+location.getLongitude());
		system.out.println("纬度:"+location.getLatitude());
		system.out.println("海拔:"+location.getAltitude());
	}
	//gps禁用时触发
	public void onProviderDisabled(String provider) {
		system.out.println("当前GPS状态:禁用\n");
	}
	//gps开启时触发
	public void onProviderEnabled(String provider) {
		system.out.println("当前GPS状态:开启\n");
	}
	//gps状态变化时触发
	public void onStatusChanged(String provider, int status,Bundle extras) {
		if(status==LocationProvider.AVAILABLE){
			system.out.println("当前GPS状态:可见的\n");
		}else if(status==LocationProvider.OUT_OF_SERVICE){
			system.out.println("当前GPS状态:服务区外\n");
		}else if(status==LocationProvider.TEMPORARILY_UNAVAILABLE){
			system.out.println("当前GPS状态:暂停服务\n");
		}
	}
};
//绑定监听,有4个参数
//参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种,我们选用GPS,网络在此不做讨论
//参数2,位置信息更新周期:
//参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
//参数4,监听
//备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener); 


三、Location

Location,位置信息,通过Location可以获取时间、经纬度、海拔等位置信息。上面采用locationListener里面的onLocationChanged()来获取location,下面讲述如何主动获取location。

Location location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
system.out.println("时间:"+location.getTime());
system.out.println("经度:"+location.getLongitude());

注意:Location location=new Location(LocationManager.GPS_PROVIDER)方式获取的location的各个参数值都是为0。

 

四、GpsStatus.Listener

GpsStatus.Listener ,GPS状态监听,包括GPS启动、停止、第一次定位、卫星变化等事件。

//定义
GpsStatus.Listener gpsStatusListener=new GpsStatus.Listener(){
	public void onGpsStatusChanged(int event) {
		if(event==GpsStatus.GPS_EVENT_FIRST_FIX){
			//第一次定位
		}else if(event==GpsStatus.GPS_EVENT_SATELLITE_STATUS){
			//卫星状态改变
			GpsStatus gpsStauts= locationManager.getGpsStatus(null); // 取当前状态
			int maxSatellites = gpsStauts.getMaxSatellites(); //获取卫星颗数的默认最大值
			Iterator<GpsSatellite> it = gpsStatus.getSatellites().iterator();//创建一个迭代器保存所有卫星
			int count = 0;  
			while (it.hasNext() && count <= maxSatellites) {  
				count++; 
				GpsStatellite s = it.next();
			}  
			system.out.println("搜索到:"+count+"颗卫星");
		}else if(event==GpsStatus.GPS_EVENT_STARTED){
			//定位启动
		}else if(event==GpsStatus.GPS_EVENT_STOPPED){
			//定位结束
		}
	}
};
//绑定
locationManager.addGpsStatusListener(gpsStatusListener);

 

五、GpsStatus

GpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。

//实例化
GpsStatus gpsStatus = locationManager.getGpsStatus(null); // 取当前状态
//获取默认最大卫星数
int maxSatellites = gpsStatus.getMaxSatellites();  
//获取第一次定位时间(启动到第一次定位)
int costTime=gpsStatus.getTimeToFirstFix();
//获取卫星
Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();
//一般再次转换成Iterator
Iterator<GpsSatellite> itrator=iterable.iterator();


六、GpsSatellite

GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。

//获取卫星
Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();
//再次转换成Iterator
Iterator<GpsSatellite> itrator=iterable.iterator();
//通过遍历重新整理为ArrayList
ArrayList<GpsSatellite> satelliteList=new ArrayList<GpsSatellite>(); 
int count=0;
int maxSatellites=gpsStatus.getMaxSatellites();
while (itrator.hasNext() && count <= maxSatellites) {  
	count++;  
	satellite = itrator.next(); 
	statelliteList.add(satellite);
} 
System.out.println("总共搜索到"+count+"颗卫星");
//输出卫星信息
for(int i=0;i<satelliteList.size();i++){
	//卫星的方位角,浮点型数据
	System.out.println(satelliteList.get(i).getAzimuth());
	//卫星的高度,浮点型数据
	System.out.println(satelliteList.get(i).getElevation());
	//卫星的伪随机噪声码,整形数据
	System.out.println(satelliteList.get(i).getPrn());
	//卫星的信噪比,浮点型数据
	System.out.println(satelliteList.get(i).getSnr());
	//卫星是否有年历表,布尔型数据
	System.out.println(satelliteList.get(i).hasAlmanac());
	//卫星是否有星历表,布尔型数据
	System.out.println(satelliteList.get(i).hasEphemeris());
	//卫星是否被用于近期的GPS修正计算
	System.out.println(satelliteList.get(i).hasAlmanac());
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值