Android(安卓)GPS NETWORK定位
Android 定位
定位所需权限:
LocationManager:
LocationManager manager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
Location Provider:
android系统存在多种provider
1)GPS_PROVIDER: 手机里有GPS芯片,然后利用该芯片就能利用卫星获得自己的位置信息。 第一次时间慢,但定位精准
2)NETWORK_PROVIDER:利用网络定位,一般是利用手机基站和WIFI节点的地址来大致定位位置
3)PASSIVE_PROVIDER: 被动定位方式。这个意思也比較明显。就是用现成的,当其它应用使用定位更新了定位信息。系统会保存下来。该应用接收到消息后直接读取就能够了
/** * 判断设备 具备哪种定位provider * * 优先采用 netWork *
* GPS 耗时耗电 * * @param locationManager * @return */ private String judgeProvider(LocationManager locationManager) { List prodiverlist = locationManager.getProviders(true); if (prodiverlist.contains(LocationManager.NETWORK_PROVIDER)) { return LocationManager.NETWORK_PROVIDER;//网络定位 } else if (prodiverlist.contains(LocationManager.GPS_PROVIDER)) { return LocationManager.GPS_PROVIDER;//GPS定位 (返回时间较长 第一次可能2-5分钟) } return null; }
获取定位信息
/** * 获取定位信息 * * @return */ @SuppressLint("MissingPermission") public void getLocationInfo(Context context) { manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); if (null != manager) { String provider = judgeProvider(manager); if (null != provider) { /** * 间隔时间 60 * 60 * 1000 ms * 间隔位置 1000 m * * @param minTime minimum time interval between location updates, in milliseconds * @param minDistance minimum distance between location updates, in meters */ manager.requestLocationUpdates(provider, 60 * 60 * 1000, 1000, locationListener); } } } private LocationListener locationListener = new LocationListener() { /** * 位置信息变化时触发 * @param location */ @Override public void onLocationChanged(Location location) { Log.i(TAG, "时间:" + location.getTime()); Log.i(TAG, "经度:" + location.getLongitude()); Log.i(TAG, "纬度:" + location.getLatitude()); Log.i(TAG, "海拔:" + location.getAltitude()); //解析具体详细位置信息 if (null != location) { getAddress(location); } } /** * GPS状态变化时触发 * @param provider * @param status * @param extras */ @Override public void onStatusChanged(String provider, int status, Bundle extras) { switch (status) { //GPS状态为可见时 case LocationProvider.AVAILABLE: Log.i(TAG, "当前GPS状态为可见状态"); break; //GPS状态为服务区外时 case LocationProvider.OUT_OF_SERVICE: Log.i(TAG, "当前GPS状态为服务区外状态"); break; //GPS状态为暂停服务时 case LocationProvider.TEMPORARILY_UNAVAILABLE: Log.i(TAG, "当前GPS状态为暂停服务状态"); break; } } /** * GPS开启时触发 */ @Override public void onProviderEnabled(String provider) { } /** * GPS禁用时触发 */ @Override public void onProviderDisabled(String provider) { } };
获取到Location之后,根据经纬度解析出详细的位置信息:
/** * 获取定位 详细信息 * * @param location * @return */ private List getAddress(Location location) { List result = null; try { if (location != null) { Geocoder gc = new Geocoder(context, Locale.getDefault()); result = gc.getFromLocation(location.getLatitude(), location.getLongitude(), 1); } } catch (Exception e) { e.printStackTrace(); } return result; }
在Address类中会有详细位置信息内容。
更多相关文章
- 自定义可拖拽的GridView
- Android(安卓)插拔sd广播
- 强大的 Android(安卓)属性动画 ObjectAnimator
- Android中wifi的HAL层
- android判断当前应用是否启动、app运行状态、某个界面是否在前台
- Android通过Termux安装scrapy遇到的问题和解决方法
- Android(安卓)开发(二) Android(安卓)Permission 中英文对照
- android emulator连接internet
- Android常用方法