加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Android入门之GPS定位分析

发布时间:2021-12-18 19:13:56 所属栏目:PHP教程 来源:互联网
导读:一、LocationManager LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。 LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 二、LocationListener LocationListener,

一、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启动、停止、第一次定位、卫星变化等事件。
 
view plaincopy to clipboardprint?
//定义   
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) {    
                GpsSatellite s = it.next();    
                count++;    
            }    
            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) {    
    GpsSatellite satellite = itrator.next();    
    satelliteList.add(satellite);    
    count++;  
}   
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());  
}  
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读