Android之GPS定位详解
2015-04-13 16:50
471 查看
一、LocationManager
LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。我们可以通过如下代码创建LocationManger对象。
LocationManger
locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
二、LocationListener
LocationListener,位置监听,监听位置变化,监听设备开关与状态。
private LocationListener
locationListener=new LocationListener()
{
public void onLocationChanged(Location
location) {
updateView(location);
Log.i(TAG,
"时间:"+location.getTime());
Log.i(TAG,
"经度:"+location.getLongitude());
Log.i(TAG,
"纬度:"+location.getLatitude());
Log.i(TAG,
"海拔:"+location.getAltitude());
}
public void onStatusChanged(String
provider, int status,
Bundle extras) {
switch (status)
{
//GPS状态为可见时
case LocationProvider.AVAILABLE:
Log.i(TAG,
"当前GPS状态为可见状态");
break;
//GPS状态为服务区外时
case LocationProvider.OUT_OF_SERVICE:
Log.i(TAG,
"当前GPS状态为服务区外状态");
break;
//GPS状态为暂停服务时
case LocationProvider.TEMPORARILY_UNAVAILABLE:
Log.i(TAG,
"当前GPS状态为暂停服务状态");
break;
}
}
public void onProviderEnabled(String
provider) {
Location
location=lm.getLastKnownLocation(provider);
updateView(location);
}
public void onProviderDisabled(String
provider) {
updateView(null);
}
};
三、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 listener
= new GpsStatus.Listener()
{
public void onGpsStatusChanged(int event)
{
switch (event)
{
//第一次定位
case GpsStatus.GPS_EVENT_FIRST_FIX:
Log.i(TAG,
"第一次定位");
break;
//卫星状态改变
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Log.i(TAG,
"卫星状态改变");
//获取当前状态
GpsStatus
gpsStatus=lm.getGpsStatus(null);
//获取卫星颗数的默认最大值
int maxSatellites
= gpsStatus.getMaxSatellites();
//创建一个迭代器保存所有卫星
Iteratoriters = gpsStatus.getSatellites().iterator();
int count
= 0;
while (iters.hasNext()
&& count <= maxSatellites) {
GpsSatellite
s = iters.next();
count++;
}
System.out.println("搜索到:"+count+"颗卫星");
break;
//定位启动
case GpsStatus.GPS_EVENT_STARTED:
Log.i(TAG,
"定位启动");
break;
//定位结束
case GpsStatus.GPS_EVENT_STOPPED:
Log.i(TAG,
"定位结束");
break;
}
};
};
//绑定监听状态
lm.addGpsStatusListener(listener);
五、GpsStatus
GpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。
//实例化
GpsStatus gpsStatus =
locationManager.getGpsStatus(null); // 获取当前状态
//获取默认最大卫星数
int maxSatellites
= gpsStatus.getMaxSatellites();
//获取第一次定位时间(启动到第一次定位)
int costTime=gpsStatus.getTimeToFirstFix();
//获取卫星
Iterableiterable=gpsStatus.getSatellites();
//一般再次转换成Iterator
Iteratoritrator=iterable.iterator();
六、GpsSatellite
GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。
//获取卫星
Iterableiterable=gpsStatus.getSatellites();
//再次转换成Iterator
Iteratoritrator=iterable.iterator();
//通过遍历重新整理为ArrayList
ArrayListsatelliteList=new ArrayList();
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
//卫星的方位角,浮点型数据
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());
}
为了便于理解,接下来模拟一个案例,如何在程序代码中使用GPS获取位置信息。
第一步:新建一个Android工程项目,命名为mygps,目录结构如下
第二步:修改main.xml布局文件,修改内容如下:
LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。我们可以通过如下代码创建LocationManger对象。
LocationManger
locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
二、LocationListener
LocationListener,位置监听,监听位置变化,监听设备开关与状态。
private LocationListener
locationListener=new LocationListener()
{
public void onLocationChanged(Location
location) {
updateView(location);
Log.i(TAG,
"时间:"+location.getTime());
Log.i(TAG,
"经度:"+location.getLongitude());
Log.i(TAG,
"纬度:"+location.getLatitude());
Log.i(TAG,
"海拔:"+location.getAltitude());
}
public void onStatusChanged(String
provider, int status,
Bundle extras) {
switch (status)
{
//GPS状态为可见时
case LocationProvider.AVAILABLE:
Log.i(TAG,
"当前GPS状态为可见状态");
break;
//GPS状态为服务区外时
case LocationProvider.OUT_OF_SERVICE:
Log.i(TAG,
"当前GPS状态为服务区外状态");
break;
//GPS状态为暂停服务时
case LocationProvider.TEMPORARILY_UNAVAILABLE:
Log.i(TAG,
"当前GPS状态为暂停服务状态");
break;
}
}
public void onProviderEnabled(String
provider) {
Location
location=lm.getLastKnownLocation(provider);
updateView(location);
}
public void onProviderDisabled(String
provider) {
updateView(null);
}
};
三、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 listener
= new GpsStatus.Listener()
{
public void onGpsStatusChanged(int event)
{
switch (event)
{
//第一次定位
case GpsStatus.GPS_EVENT_FIRST_FIX:
Log.i(TAG,
"第一次定位");
break;
//卫星状态改变
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Log.i(TAG,
"卫星状态改变");
//获取当前状态
GpsStatus
gpsStatus=lm.getGpsStatus(null);
//获取卫星颗数的默认最大值
int maxSatellites
= gpsStatus.getMaxSatellites();
//创建一个迭代器保存所有卫星
Iteratoriters = gpsStatus.getSatellites().iterator();
int count
= 0;
while (iters.hasNext()
&& count <= maxSatellites) {
GpsSatellite
s = iters.next();
count++;
}
System.out.println("搜索到:"+count+"颗卫星");
break;
//定位启动
case GpsStatus.GPS_EVENT_STARTED:
Log.i(TAG,
"定位启动");
break;
//定位结束
case GpsStatus.GPS_EVENT_STOPPED:
Log.i(TAG,
"定位结束");
break;
}
};
};
//绑定监听状态
lm.addGpsStatusListener(listener);
五、GpsStatus
GpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。
//实例化
GpsStatus gpsStatus =
locationManager.getGpsStatus(null); // 获取当前状态
//获取默认最大卫星数
int maxSatellites
= gpsStatus.getMaxSatellites();
//获取第一次定位时间(启动到第一次定位)
int costTime=gpsStatus.getTimeToFirstFix();
//获取卫星
Iterableiterable=gpsStatus.getSatellites();
//一般再次转换成Iterator
Iteratoritrator=iterable.iterator();
六、GpsSatellite
GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。
//获取卫星
Iterableiterable=gpsStatus.getSatellites();
//再次转换成Iterator
Iteratoritrator=iterable.iterator();
//通过遍历重新整理为ArrayList
ArrayListsatelliteList=new ArrayList();
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
//卫星的方位角,浮点型数据
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());
}
为了便于理解,接下来模拟一个案例,如何在程序代码中使用GPS获取位置信息。
第一步:新建一个Android工程项目,命名为mygps,目录结构如下
第二步:修改main.xml布局文件,修改内容如下:
相关文章推荐
- android GPS定位 详解(7)
- Android之GPS定位详解
- Android之GPS定位详解
- android开发之GPS定位详解
- Android之GPS定位详解
- android GPS定位 详解(7)
- Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)
- Android入门之GPS定位详解
- Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)
- Android之GPS定位详解
- Android之GPS定位详解
- Android之GPS定位详解
- Android之GPS定位详解
- android Gps 定位方法详解
- AndroidGPS定位详解 (4)
- Android之GPS定位详解
- Android之GPS定位详解
- Android之GPS定位详解
- android开发之GPS定位详解
- android Gps 定位 百度地图集成方法详解-----编码