欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

02-Android-原生定位

程序员文章站 2022-03-23 11:51:37
大纲:Anroid原生定位有缺点,原生定位的常用类与接口原生定位例子Android系统提供了地理位置服务相关的API方便开发者去获得当前地理位置,位于android.location包中,接口:类:LocationManager该类提供了访问地理位置的服务,可以获取上一次最新的地理位置信息,也可以注册监听事件来周期性的获得设备更新的地理位置信息。LocationManager lm = (LocationManager) getSystemService(Context.LOCATI...

大纲:
Anroid原生定位有缺点,
原生定位的常用类与接口
原生定位例子

Android系统提供了地理位置服务相关的API方便开发者去获得当前地理位置,位于android.location包中,
接口:
02-Android-原生定位
类:
02-Android-原生定位
LocationManager
该类提供了访问地理位置的服务,可以获取上一次最新的地理位置信息,也可以注册监听事件来周期性的获得设备更新的地理位置信息。LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

在获取地理位置信息时我们必须了解一下两个知识点:
1、provider
2、LocationListener
Provider:位置信息的提供者,android系统一般提供三种方式来获取地理位置信息。
1、GPS_PROVIDER:通过gps来获取地理位置的经纬度信息,优点:获取地理位置信息精确度高,缺点:只能在户外使用,获取经纬度信息耗时,耗电。
2、NETWORK_PROVIDER:通过移动网络的基站或者WiFi来获得地理位置,优点:只要有网络,获取速度快,在室内室外都可以使用。缺点:精确度不高。
3、PASSIVE_PROVIDER:被动的接收更新的地理位置信息,而不用自己主动请求地理位置。

LocationManager类中提供了以下几种方法来获得地理位置提供者。
1、public List getAllProviders();
返回当前设备所有地理位置提供者。
2、public List getProviders(boolean enabledOnly);
当参数为true时,返回的时当前设备可使用的位置提供者;当参数为false时和上面那个方法一样,返回所有的位置提供者。

3、public String getBestProvider(Criteria criteria, boolean enabledOnly);
当前设备最符合指定条件的位置提供者,第一个参数criteria用于指定条件,第二个参数表示是否返回当前设备可用的位置提供者。
4、public List getProviders(Criteria criteria, boolean enabledOnly);
以上方法也是返回当前符合条件的所有可用的provider。

Criteria类用于指定筛选最符合条件的地理位置提供者,根据Cirteria指定的条件,设备会自动选择哪种location provider。
Criteria类中提供如下方法来指定条件:
1、public void setAccuracy(int accuracy):位置解析精确度,
参数
Criteria.ACCURACY_FINE:表示高精确度。Criteria.ACCURACY_COARSE:表示模糊精确度。
2、public void setAltitudeRequired(boolean altitudeRequired ):是否要求海拔信息。
3、public void setBearingRequired(boolean bearingRequired):是否要求方向信息。
4、public void setCostAllowed(boolean costAllowed):是否允许收费
5、public void setSpeedRequired(boolean speedRequired):是否要求速度信息。
6、public void setPowerRequirement(int level):设置电池消耗要求,参数 Criteria. NO_REQUIREMENT, Criteria. POWER_LOW, Criteria. POWER_MEDIUM, Criteria. POWER_HIGH。分别表示 :无、低、中、高。
7、public void setBearingAccuracy(int accuracy):设置方向的精准度。参数 Criteria.NO_REQUIREMENT, Criteria.ACCURACY_LOW, Criteria.ACCURACY_HIGH。分别表示:无,低,高。
8、public void setSpeedAccuracy(int accuracy):设置速度的精准度。参数同上。
9、public void setHorizontalAccuracy(int accuracy):设置水平方向的精准度。参数同上。
10、public void setVerticalAccuracy(int accuracy):设置垂直方向的精准度。参数同上。
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置定位精准度
criteria.setAltitudeRequired(false);//是否要求海拔
criteria.setBearingRequired(true);//是否要求方向
criteria.setCostAllowed(true);//是否要求收费
criteria.setSpeedRequired(true);//是否要求速度
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);//设置电池耗电要求
criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH);//设置方向精确度
criteria.setSpeedAccuracy(Criteria.ACCURACY_HIGH);//设置速度精确度
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);//设置水平方向精确度
criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);//设置垂直方向精确度
//返回满足条件的,当前设备可用的location provider,当第二个参数为false时,返回当前设备所有provider中最符合条件的那个provider(但是不一定可用)。
String mProvider = mLocationManager.getBestProvider(criteria,true);
LocationManager类中提供了如下方法来获得最新一次更新的地理位置信息。
public Location getLastKnownLocation(String provider);
02-Android-原生定位
getLastKnownLocation()方法只能一次性的获得当前最新的地理位置,但是它不能实时的监听地理位置的变化情况。Android给开发者提供了一个接口监听类LocationListener来实时监听当前设备的地理位置变化情况。
LocationListener用于监听当地理位置有改变时来接收通知的接口类。在使用该监听之前必须要用LocationManager类中的如下方法来注册该监听事件。
02-Android-原生定位
参数一:位置提供者;
参数二:位置更新最短时间(单位ms);
参数三:位置更新最短距离(单位m);
参数四:LocationListener监听器对象。
public interface LocationListener {
//当位置改变时调用.
void onLocationChanged(Location location);
//当location provider的状态改变时,该方法被调用。
//状态有三种:
//OUT_OF_SERVICE:无服务
//TEMPORARILY_UNAVAILABLE:provider不可用
//AVAILABLE:provider可用
void onStatusChanged(String provider, int status, Bundle extras);
//当provider可用时调用,比如gps可用时就会调用该方法。
void onProviderEnabled(String provider);
//当provider不可用时调用该方法。
//比如gps未打开,gps不可用就会调用该方法。
void onProviderDisabled(String provider);
}
Geocoder该类用于获取地理位置的前向编码和反向编码,前向编码是根据地址获取经纬度;反向编码是根据经纬度获取对应的详细地址。Geocoder 请求的是一个后台服务,但是该服务不包括在标准android framework中。因此如果当前设备不包含location services,则Geocoder返回的地址或者经纬度为空。

可以使用 public static boolean isPresent():判断当前设备是否内置了地理位置服务。返回true表示Geocoder地理编码可以使用,否则不可使用。由于国内使用不了Google Services服务,因此一般的手机厂商都会在自己的手机内内置百度地图服务,或者高德地图服务来替代Google Services服务。
public List<Address> getFromLocation(double latitude, double longitude, int maxResults):根据经纬度返回对应的地理位置信息。参数一:经度;参数二:维度;参数三:返回地址的数目(由于同一经纬度可能对于多个地址,该参数取1~5之间)。

public List<Address> getFromLocationName(String locationName, int maxResults) :根据具体地址来获取相应的地理位置信息。参数一:地址;参数二:返回地址的数目(取1~5之间)。

Geocoder geocoder = new Geocoder(this);
boolean falg = geocoder.isPresent();
StringBuilder stringBuilder = new StringBuilder();
//根据经纬度获取地理位置信息
List

addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
//根据地址获取地理位置信息
List
addresses = geocoder.getFromLocationName( “广州大学华软软件学院", 1);
02-Android-原生定位
02-Android-原生定位
LocationManager:本类提供访问定位服务的功能,也提供获取最佳定位提供者的功能。
LocationListener:提供定位信息发生改变时的回调功能。必须事先在定位管理器中注册监听器对象。
Criteria:该类使得应用能够通过在LocationProvider中设置属性来选择合适的定位提供者。

本文地址:https://blog.csdn.net/weixin_44123412/article/details/107469562

相关标签: 基于android的定位