android平台上GPS信号的获取和展示(二)之响应与信号解析

本文继续探讨Android平台上GPS信号的获取和展示。详细讲述了location监听函数和卫星监听函数的响应处理,包括location变化时的位置信息显示,以及卫星参数变化时的Status响应函数的调用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上文写了GPS的location监听函数和卫星的监听函数,接下来是监听函数的响应函数:

1. location响应函数,当手机终端移动时,位置会发生改变,就会触发下面的location响应函数

//定位监听类负责监听位置信息的变化情况
    private final LocationListener locationListener = new LocationListener()
	{
               //当位置改变时调用下面的函数
		@Override
		public void onLocationChanged(Location location)
		{
	        //通过GPS获取位置,新的位置信息放在location中,调用updateToNewLocation函数显示位置信息     
	    	      updateToNewLocation(location);   
		}
                //当Provider不可用时调用下面的函数  
		@Override
		public void onProviderDisabled(String arg0)
		{
			
		}
                
		@Override
		public void onProviderEnabled(String arg0)
		{
		
		}
                @Override
		public void onStatusChanged(String arg0, int arg1, Bundle arg2)
		{
	    	      updateToNewLocation(null);   
		}
	};


2. 显示GPS位置信息,location响应函数中,当location发生变化时调用下面的函数

private void updateToNewLocation(Location location) 
    {       

    	if (location != null)
    	{           
    		bear = location.getBearing();	//偏离正北方的度数
    		float  latitude = (float)location.getLatitude();      //维度
    		float longitude= (float)location.getLongitude();     //经度 
    		float GpsSpeed = (float)location.getSpeed();	//速度	
    		long GpsTime = location.getTime();	//时间
    		Date date = new Date(GpsTime);          //利用Date进行时间的转换
    		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");       //设置时间的显示格式 也可以设置为:yyyy/MM/dd HH:mm:ss
    		
    		float GpsAlt = (float)location.getAltitude();		//海拔
    		latitudeview.setText("" + latitude);
    		longitudeview.setText("" + longitude);
    		speedview.setText(""+GpsSpeed);
    		timeview.setText(""+df.format(date));
    		altitudeview.setText(""+GpsAlt);
    		bearingview.setText(""+bear);
    		} 
    		else
    		{     
    			Toast.makeText(this, "无法获取地理信息", Toast.LENGTH_SHORT).show(); 
    		}  
    	}

}


3.Status 响应函数,当接收到的卫星的参数发生改变时,就会调用下面的响应函数

  //添加监听卫星
    private final GpsStatus.Listener statusListener= new GpsStatus.Listener(){
		
		@Override
		public void onGpsStatusChanged(int event) {
			// TODO Auto-generated method stub
			//获取GPS卫星信息,与获取location位置信息一样,还是通过locationManager类,方法为getGpsStatus,返回的是一个GpsStatus类型的结构
			gpsStatus = locationManager.getGpsStatus(null);
			//触发事件event
			switch(event)
			{
			case GpsStatus.GPS_EVENT_STARTED:
				
			break;
				//第一次定位时间
			case GpsStatus.GPS_EVENT_FIRST_FIX:
				
			break;
				//收到卫星信息,并调用DrawMap()函数,进行卫星信号解析并显示到屏幕上
			case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
				DrawMap();
				
			break;
			
			case GpsStatus.GPS_EVENT_STOPPED:
			break;
			}
		}
	};

4. 卫星信号解析

 private int heightp;
	private int widthp;
	
	protected void DrawMap() {
		// TODO Auto-generated method stub
		
		int i = 0;
		//获取屏幕信息,dm为DisplayMetrics类型的变量
		 dm = new DisplayMetrics();
		 getWindowManager().getDefaultDisplay().getMetrics(dm);     //调用这三个函数将屏幕信息保存在dm中
		 heightp = dm.heightPixels;  //手机屏幕高度
		 widthp = dm.widthPixels;   //手机屏幕宽度

		//获取卫星信息,gpsStatus为卫星响应函数中获得的卫星GpsStatus类型变量
		allSatellites = gpsStatus.getSatellites();
		Iteratorsate = allSatellites.iterator();
		//遍历获取每颗卫星的信息
		while(Iteratorsate.hasNext())
		{
			GpsSatellite satellite = Iteratorsate.next();
			alimuth[i] = satellite.getAzimuth();	//坐标方位角
			elevation[i] = satellite.getElevation();	//卫星仰角
			snr[i] = satellite.getSnr();        
			i++;
		}
		satcountview.setText(""+i);
         //layout为继承自View的类,并调用其中的redraw显示卫星信息
    	layout.redraw(bear,alimuth,elevation,snr, widthp,heightp, i);
         //调用invalidate()方法刷新view,显示绘制的信息
    	layout.invalidate();
	}



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值