100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android获取GPS网络定位经纬度信息

Android获取GPS网络定位经纬度信息

时间:2024-03-18 12:59:05

相关推荐

Android获取GPS网络定位经纬度信息

定位一般分为是:GPS定位,WIFI定位,基站定位 和 AGPS定位

GPS定位

GPS定位需要手机GPS模块硬件支持.GPS走的是卫星通信的通道,在没有网络连接的情况下也能使用,并且通过GPS方式准确度是最高的

但是比较耗电,绝大部分用户默认不开启GPS模块,从GPS模块启动到获取第一次定位数据,可能需要比较长的时间,室内几乎无法使用

网络定位

网络定位是指利用基站或Wi-Fi访问提供近似的位置信息,这种定位方式取决于服务器,即取决于将基站或WIF节点信息翻译成位置信息的服务器 的能力.由于WIFI定位和基站定位都需要使用网络,所以在Android设备上统称为Network网络定位

WIFI定位

根据一个固定的Wifi MAC地址,通过收集到的该Wifi热点的位置,然后访问网络上的定位服务以获得经纬度坐标.因为它

基站定位

各大运营商的基站已经覆盖了全国大部分地区,每个基站的ID号是全球唯一的,只要手机能接收到周围基站的信号(手机有信号),用收到该基站的信号强度当做相对基站的距离,开启流量开关,通过GPRS可以获取到手机连接基站的位置信息

Android获取网络定位的方式?

1.系统原生API,LocationManager,原生API需要使用到Google GMS(Google Mobile Service)中的网络定位服务,而国内目前没有一家通过GMS认证,所以不会有这个服务.以致于通过原生API获取不到网络定位(测试发现 小米能通过原生API获取定位信息,猜测集成了第三方定位服务,也就是如下方式).

2.百度地图SDK、高德地图SDK等SDK(免费),目前部分国内手机通过集成这类定位服务,达到 调用原生API也能获取到网络定位的需求

Android LocationManager 获取当前位置实现:

public class GPSManager {private static final String TAG = "GPSManager";private LocationManager mLocationManager;private Context mContext;public GPSManager(Context context) {mContext = context;mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);}/*** 判断定位服务是否开启*/public boolean isOpen() {boolean gps = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);// WLAN或移动网络boolean network = mLocationManager.isProviderEnabled(WORK_PROVIDER);if (gps || network) {return true;}return false;}/*** 打开定位服务*/public void openGPS(Context context) {Intent GPSIntent = new Intent();GPSIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvide");GPSIntent.addCategory("android.intent.category.ALTERNATIVE");GPSIntent.setData(Uri.parse("toast:3"));try {//使用PendingIntent发送广播告诉手机去开启GPS功能PendingIntent.getBroadcast(context, 0, GPSIntent, 0).send();} catch (PendingIntent.CanceledException e) {e.printStackTrace();}}/*** 获取经纬度信息*/public void getGPSConfi(Activity activity) {if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 0);return;}Location location;if (mLocationManager.isProviderEnabled(WORK_PROVIDER)) {mLocationManager.requestLocationUpdates(WORK_PROVIDER, 1000, 0, mLocationListener);location = mLocationManager.getLastKnownLocation(WORK_PROVIDER);} else {mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, mLocationListener);location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);}if (location != null) {double latitude = location.getLatitude();double longitude = location.getLongitude();Log.d(TAG, "经纬度:" + latitude + "--" + longitude);} else {Log.d(TAG, "未获取到经纬度数据");}}private LocationListener mLocationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {if (location != null) {double latitude = location.getLatitude();double longitude = location.getLongitude();Log.d(TAG, "onLocationChanged: 经纬度:" + latitude + "--" + longitude);}}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {Log.d(TAG, "onStatusChanged: " + provider + " " + status);}@Overridepublic void onProviderEnabled(String provider) {Log.d(TAG, "onProviderEnabled: " + provider);}@Overridepublic void onProviderDisabled(String provider) {Log.d(TAG, "onProviderDisabled: " + provider);}};}

GPSManager gpsManager = new GPSManager(this);gpsManager.isOpen();gpsManager.getGPSConfi(this);

AGPS定位

AGPS(AssistedGPS:辅助全球卫星定位系统)AGPS技术是一种结合了网络基站信息和GPS信息对移动台进行定位的技术,利用基地台代送辅助卫星信息,以缩减GPS芯片获取卫星信号的延迟时间,受遮盖的室内也能借基地台讯号弥补,减轻GPS芯片对卫星的依赖度.和纯GPS、基地台三角定位比较,AGPS能提供范围更广、更省电、速度更快的定位服务,理想误差范围在10公尺以内.堪称目前定位精度最高的一种定位技术.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。