定位功能
2014-04-02 15:17
309 查看
首先需要添加上权限,所以需要添加如下权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
具体实现代码如下:
首先判断GPS模块是否存在或者是开启:
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Toast.makeText(MainActivity.this, "请开启GPS导航...", Toast.LENGTH_SHORT).show(); // 返回开启GPS导航设置界面 Intent intent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(intent, 0); return; }
如果开启正常,则会直接进入到显示页面,如果开启不正常,则会进行到GPS设置页面:
返回查询条件
private Criteria getCriteria() {
Criteria criteria = new Criteria();
// 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细
criteria.setAccuracy(Criteria.ACCURACY_FINE);
// 设置是否要求速度
criteria.setSpeedRequired(false);
// 设置是否允许运营商收费
criteria.setCostAllowed(false);
// 设置是否需要方位信息
criteria.setBearingRequired(false);
// 设置是否需要海拔信息
criteria.setAltitudeRequired(true);
// 设置对电源的需求
criteria.setPowerRequirement(Criteria.POWER_LOW);
return criteria;
}
位置监听
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状态为可见时 case LocationProvider.AVAILABLE: Toast.makeText(MainActivity.this, "当前GPS状态为可见状态", Toast.LENGTH_LONG).show(); break; // GPS状态为服务区外时 case LocationProvider.OUT_OF_SERVICE: Toast.makeText(MainActivity.this, "当前GPS状态为服务区外状态", Toast.LENGTH_LONG).show(); break; // GPS状态为暂停服务时 case LocationProvider.TEMPORARILY_UNAVAILABLE: Toast.makeText(MainActivity.this, "当前GPS状态为暂停服务状态", Toast.LENGTH_LONG).show(); break; } } /** * GPS开启时触发 */ public void onProviderEnabled(String provider) { Location location = locationManager.getLastKnownLocation(provider); updateView(location); } /** * GPS禁用时触发 */ public void onProviderDisabled(String provider) { updateView(null); } };
状态监听
private 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 = locationManager.getGpsStatus(null); // 获取卫星颗数的默认最大值 int maxSatellites = gpsStatus.getMaxSatellites(); // 创建一个迭代器保存所有卫星 Iterator<GpsSatellite> iters = gpsStatus.getSatellites() .iterator(); int count = 0; while (iters.hasNext() && count <= maxSatellites) { 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; } }; };
实时更新文本内容
private void updateView(Location location) { if (location != null) { editText.setText("设备位置信息\n\n经度:"); editText.append(String.valueOf(location.getLongitude())); editText.append("\n纬度:"); editText.append(String.valueOf(location.getLatitude())); editText.append("\n海拔:"); editText.append(String.valueOf(location.getAltitude())); } else { editText.getEditableText().clear(); } }
项目源代码下载
相关文章推荐
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- 解決Linux下Android开发真机调试设备不被识别问题
- [Android]在代码里运行另一个程序的方法
- [软件咨询]WPS2012正式版已发布 金山Office移动版4.0发布
- Android笔记-Linux Kernel Ftrace (Function Trace)解析
- 手机4大隐藏功能及使用必知常识第1/2页
- android USB如何修改VID具体实现
- Android增量升级的方法和原理详细介绍
- Android Mouse实现过程详细笔记
- 深入Android Browser配置管理的详解
- Android Mms之:深入理解对话列表管理
- Android APP与媒体存储服务的交互
- android 多线程技术应用
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- Android数据类型之间相互转换系统介绍
- 通过Android trace文件分析死锁ANR实例过程
- Android实现左右滑动效果的方法详解