Android 定位
来源:互联网 发布:网络侵权著作权案例 编辑:程序博客网 时间:2024/04/28 15:37
什么是GPS定位、基站定位和Wi-Fi定位?
1、GPS定位:根据设备GPS芯片和GPS卫星实现定位,GPS定位在室内是不可以使用的。GPS定位精度和芯片本身以及实际使用环境有关,一般情况下,GPS定位精度在10m左右。
2、基站定位:根据设备获取的基站信息实现定位,基站定位精度一般不受使用环境影响,主要和基站的覆盖半径有关。基站定位服务精度目前在200m左右。
3、Wi-Fi定位:根据设备获取的Wi-Fi的信息进行定位,Wi-Fi定位精度一般不受使用环境影响,主要和Wi-Fi半径,密度有关。Wi-Fi定位精度目前在20m左右。
目前智能手机都内置了GPS芯片,相对应的各个手机系统厂商也开放了对外的GPS接口。但是由于GPS受外界因素影响比较大,一般的APP也都是室内使用,所以严重影响到了GPS搜星的数量。不过以前在外包公司接手过这么一个项目,主要面向室外的骑行爱好者使用,满足他们骑行路线的绘制。面对这样一个需求,GPS定位是最靠谱的选择了,但是伤不起的耗电量呀。
所以一般比较靠谱的方式,就是使用百度高德这些企业为开发者提供的成熟方案,可以选择混合定位的方式以应对APP复杂的实际使用情况。混合定位就是使用以上三种定位技术,选择最优的方式去获取当前的地理位置。
Android GPS 定位的实现
要实用Adnroid平台的GPS设备,首先需要添加上权限,所以需要添加如下权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
首先判断GPS模块是否存在或者是开启:
private void openGPSSettings() {
LocationManager alm = (LocationManager) this
.getSystemService(Context.LOCATION_SERVICE);
if (alm
.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
Toast.makeText(this, "GPS模块正常", Toast.LENGTH_SHORT)
.show();
return;
}
Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
startActivityForResult(intent,0); //此为设置完成后返回到获取界面
}
如果开启正常,则会直接进入到显示页面,如果开启不正常,则会进行到GPS设置页面:
获取代码如下:
private void getLocation() {
// 获取位置管理服务
LocationManager locationManager;
String serviceName = Context.LOCATION_SERVICE;
locationManager = (LocationManager) this.getSystemService(serviceName);
// 查找到服务信息
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE); // 高精度
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗
String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息
Location location = locationManager.getLastKnownLocation(provider); // 通过GPS获取位置
updateToNewLocation(location);
// 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米
locationManager.requestLocationUpdates(provider, 100 * 1000, 500,
locationListener);
}
到这里就可以获取到地理位置信息了,但是还是要显示出来,那么就用下面的方法进行显示:
private void updateToNewLocation(Location location) {
TextView tv1;
tv1 = (TextView) this.findViewById(R.id.tv1);
if (location != null) {
double latitude = location.getLatitude();
double longitude= location.getLongitude();
tv1.setText("维度:" + latitude+ "\n经度" + longitude);
} else {
tv1.setText("无法获取地理信息");
}
}
具体可参考:http://www.bkjia.com/Androidjc/849063.html
http://blog.csdn.net/liu_zhen_wei/article/details/8185729
http://bbs.51cto.com/thread-955194-1.html
http://www.tuicool.com/articles/2uQrue
- Android 定位
- 【Android】定位
- android 定位
- android定位
- android 定位
- Android 定位
- Android定位
- android定位
- Android 定位
- Android 定位
- android 定位
- Android 定位
- Android 定位
- Android定位
- android 定位
- android 定位
- Android定位
- Android定位
- Mac OSX 10.9搭建nginx+mysql+php-fpm环境
- 轻松搞定VC加载jpg格式图片(CImage)
- 【网络流】hdu3435 A new Graph Game
- Socket编程简单实现服务端客户端连接
- div中图片居中
- Android 定位
- redis cluster
- 【网络流】hdu3488 Tour
- nyoj241字母统计
- Andrdoid中对应用程序的行为拦截实现方式之----从底层C进行拦截
- 华为云计算大会 - 第一天观后感
- 【网络流】hdu3549 Flow Problem
- 数据结构 绪论
- 【ThinkingInC++】54、对于静态函数的调用