Android中GPS卫星定位的使用


关于Android应用中的GPS卫星定位。

一、应用层实现

1.首先需要在AndroidMainfest.xml中开启定位权限。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  //开启精确定位权限,误差一般为三到十米。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  //开启粗略定位权限,误差一般不超过1.5km。

2.创建LocaionManager(位置管理器、总控制器)对象。

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

3.创建Location(位置)对象。

Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

/* Location类的常用方法:location.getLongitude(); //获取经度

                                       location.getLatitude(); //获取纬度

                                       location.getAltitude(); //获取海拔

                                       location.getTime(); //获取时间 */

//AS下该语句报错,ALT+ENTER出现额外代码块,该代码块检查定位权限是否开启。

4.创建LocationListener对象,监听位置变化,LocationListener为接口,故需要实现类,本文使用匿名内部类实现。

LocationListener mLocationListener = new LocationListener(){

@Override
public void onLocationChanged(){ //位置变化时该方法自动触发

//自己定义的方法体

}

@Override
public void onStatusChanged(String provider , int status , Bundle extra){

//provider:我的手机上值是gps,status:GPS状态,extra:额外信息

/* status(GPS状态) 一共有三种:1.LocationProvider.AVAILABLE; 服务可获得

                                                     2.LocationProvider.OUT_OF_SERVICE; 不在服务区

                                                     3.LocationProvider.TEMPORARITY_UNAVAILABLE; 服务未提供

//自己定义方法体

}

@Override
public void onProviderEnabled(String provider){

//当用户启用具有定位功能的硬件时调用

//自己定义方法体

}

@Override
public void onProviderDisabled(){

//当用户禁用具有定位功能的硬件时调用

//自己定义方法体

}
};
5.创建GpsStatus.Listener对象,其中Listener是GpsStatus的一个成员内部类(Listener是一个接口,仍然需要实现类,本文仍然采用匿名内部类)。

//细心的朋友也许会发现前面的mLocationListener也实现了类似的功能,没错。

GpsStatus.Listener mListener = new GpsStatus.Listener(){

@Override
public void onGpsStatusChanged(int event){

//event代表GPS的状态

//自己定义方法体
}
};
mLocationManager.addGpsStatusListener(mListener); //别忘了注册监听器

6.创建GpsStatus对象。

GpsStatus mGpsStatus = mLocationManager.getGpsStatus(null);

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


只需要实时定位信息的话只需要完成前四步即可。

细心的朋友可能会发现GpsStatus的功能似乎与LocationListener有点重复,没错,GpsStatus最有用的功能(个人见解)其实是开启查分定位数据监听,但目前的移动设备具博主

所知大部分都是单点定位,想使用差分定位需要厂商定制,所以只在具体的环境中使用。

mLocationManager.addNmeaListener(new GpsStatus.NmeaListener(){

    @Override

    public void onNmeaReceived(long l , String s){ //接收到Nmea数据时该方法会被调用,l表示数据长度,s表示数据本身

       //自己定义方法体

    }

});


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM