开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
一、LocationManager
LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。我们可以通过如下代码创建LocationManger对象。
二、LocationListener
LocationListener,位置监听,监听位置变化,监听设备开关与状态。
private LocationListener locationListener=new LocationListener() {
/**
* 位置信息变化时触发
*/
public void onLocationChanged(Location location) {
updateView(location);
/**
* GPS状态变化时触发
*/
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
//GPS状态为可见时
Log.i(TAG, "当前GPS状态为可见状态");
break;
//GPS状态为服务区外时
Log.i(TAG, "当前GPS状态为服务区外状态");
break;
//GPS状态为暂停服务时
Log.i(TAG, "当前GPS状态为暂停服务状态");
break;
/**
* GPS开启时触发
*/
public void onProviderEnabled(String provider) {
updateView(location);
/**
* GPS禁用时触发
*/
public void onProviderDisabled(String provider) {
updateView(null);
};
三、Location
Location,位置信息,通过Location可以获取时间、经纬度、海拔等位置信息。上面采用locationListener里面的onLocationChanged()来获取location,下面讲述如何主动获取location。
//状态监听
public void onGpsStatusChanged(int event) {
switch (event) {
//第一次定位
Log.i(TAG, "第一次定位");
break;
//卫星状态改变
Log.i(TAG, "卫星状态改变");
//获取当前状态
//获取卫星颗数的默认最大值
//创建一个迭代器保存所有卫星
int count = 0;
count++;
break;
//定位启动
Log.i(TAG, "定位启动");
break;
//定位结束
Log.i(TAG, "定位结束");
break;
};
};
//绑定监听状态
五、GpsStatus
GpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。
//实例化
//获取默认最大卫星数
//获取卫星
//一般再次转换成Iterator
六、GpsSatellite
GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。
//获取卫星
//再次转换成Iterator
//通过遍历重新整理为ArrayList
ArrayList<GpsSatellite> satelliteList=new ArrayList<GpsSatellite>();
int count=0;
count++;
//输出卫星信息
//卫星的方位角,浮点型数据
//卫星的高度,浮点型数据
//卫星的伪随机噪声码,整形数据
//卫星的信噪比,浮点型数据
//卫星是否有年历表,布尔型数据
//卫星是否有星历表,布尔型数据
//卫星是否被用于近期的GPS修正计算
为了便于理解,接下来模拟一个案例,如何在程序代码中使用GPS获取位置信息。
第一步:新建一个Android工程项目,命名为mygps,目录结构如下
<?xml version="1.0" encoding="utf-8"?>
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="false"
android:editable="false"
android:id="@+id/editText"/>
</LinearLayout>
第三步:实用Adnroid平台的GPS设备,需要添加上权限
第四步:修改核心组件activity,修改内容如下
public class MainActivity extends Activity {
private EditText editText;
private LocationManager lm;
private static final String TAG = "GpsActivity";
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
@Override
public void onCreate(Bundle savedInstanceState) {
// 判断GPS是否正常启动
// 返回开启GPS导航设置界面
startActivityForResult(intent, 0);
return;
// 为获取地理位置信息时设置查询条件
// 获取位置信息
updateView(location);
// 监听状态
// 绑定监听,有4个参数
// 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种
// 参数2,位置信息更新周期,单位毫秒
// 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
// 参数4,监听
// 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
// 1秒更新一次,或最小位移变化超过1米更新一次;
// 位置监听
private LocationListener locationListener = new LocationListener() {
/**
* 位置信息变化时触发
*/
public void onLocationChanged(Location location) {
updateView(location);
/**
* GPS状态变化时触发
*/
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
// GPS状态为可见时
Log.i(TAG, "当前GPS状态为可见状态");
break;
// GPS状态为服务区外时
Log.i(TAG, "当前GPS状态为服务区外状态");
break;
// GPS状态为暂停服务时
Log.i(TAG, "当前GPS状态为暂停服务状态");
break;
/**
* GPS开启时触发
*/
public void onProviderEnabled(String provider) {
updateView(location);
/**
* GPS禁用时触发
*/
public void onProviderDisabled(String provider) {
updateView(null);
};
// 状态监听
public void onGpsStatusChanged(int event) {
switch (event) {
// 第一次定位
Log.i(TAG, "第一次定位");
break;
// 卫星状态改变
Log.i(TAG, "卫星状态改变");
// 获取当前状态
// 获取卫星颗数的默认最大值
// 创建一个迭代器保存所有卫星
int count = 0;
count++;
break;
// 定位启动
Log.i(TAG, "定位启动");
break;
// 定位结束
Log.i(TAG, "定位结束");
break;
};
};
/**
* 实时更新文本内容
* @param location
*/
private void updateView(Location location) {
if (location != null) {
} else {
// 清空EditText对象
/**
* 返回查询条件
* @return
*/
private Criteria getCriteria() {
Criteria criteria = new Criteria();
// 设置是否要求速度
// 设置是否允许运营商收费
// 设置是否需要方位信息
// 设置是否需要海拔信息
// 设置对电源的需求
return criteria;
第五步:运行效果如下,嘿嘿,用的小米3的工程机做的测试,米3 发布会吹嘘的搜星速度确实很快: