Android根据系统策略选择GPS定位
来源:互联网 发布:iphone刷机后数据恢复 编辑:程序博客网 时间:2024/05/29 12:31
前期有这需求,代码也敲了,但是后面功能被阉,现在项目要提交svn,放在这里有需要直接搬过去
====================================================================================================================================
直接上代码:
LocationItem.java
import com.google.gson.Gson;/** * * */public class LocationItem {private String lat;private String lon;private String timeStamp;public String getLat() {return lat;}public void setLat(String lat) {this.lat = lat;}public String getLon() {return lon;}public void setLon(String lon) {this.lon = lon;}public String getTimeStamp() {return timeStamp;}public void setTimeStamp(String timeStamp) {this.timeStamp = timeStamp;}public LocationItem(String lat, String lon, String timeStamp) {super();this.lat = lat;this.lon = lon;this.timeStamp = timeStamp;}public LocationItem() {super();}@Overridepublic String toString() {// TODO Auto-generated method stubreturn new Gson().toJson(this);}}
LocationUploadService.java
import java.util.List;import android.app.Service;import android.content.Context;import android.content.Intent;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.os.IBinder;import com.lidroid.xutils.util.LogUtils;import *.client.core.service.IParamsService;import *.client.core.service.impl.ParamsServiceImpl;/** * 定位服务 */public class LocationUploadService extends Service {private LocationManager locationManager;/** 过滤提供器 */private Criteria criteria = new Criteria();/** 多久检测位置变化 毫秒 */private static int minUpdateTime = 2 * 1000;//60 * 1000;/** 多远触发更新 米 */private static int minUpdateDistance = 1;//50;@Overridepublic void onCreate() {super.onCreate(); }@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);if (null == criteria) {criteria = new Criteria();}criteria.setAccuracy(Criteria.ACCURACY_FINE);// 要求高精度criteria.setPowerRequirement(Criteria.POWER_LOW);// 低耗电criteria.setAltitudeRequired(false);// 不要求海拔信息criteria.setBearingRequired(false);// 不要求方位信息criteria.setSpeedRequired(false);// 不要求速度信息criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);// 水平精度要求高registerListener();return super.onStartCommand(intent, flags, startId);}/** * 注册监听器 */private void registerListener() {removeAllUpdate();String bestProvider = locationManager.getBestProvider(criteria, false);// false:不排除未启动final String bestEnabledProvider = locationManager.getBestProvider(criteria, true);// true:排除未启动d("提供器筛选结果:(bestProvider=" + bestProvider + " bestEnabledProvider:"+ bestEnabledProvider + ")");if (null == bestProvider) {d("设备无定位模块");} else if (bestProvider.equals(bestEnabledProvider)) {d("提供器一致,目前为最佳:" + bestEnabledProvider);// 一致,则最佳已开启locationManager.requestLocationUpdates(bestEnabledProvider,minUpdateTime, minUpdateDistance, bestEnabledlistener);} else {// 不一致,最佳未启动,注册最佳,当最佳开启时重新注册locationManager.requestLocationUpdates(bestProvider, minUpdateTime,minUpdateDistance, bestlistener);if (null != bestEnabledProvider) {d("暂时用已开启中的最佳:" + bestEnabledProvider);locationManager.requestLocationUpdates(bestEnabledProvider,minUpdateTime, minUpdateDistance, bestEnabledlistener);} else {d("当前没有一个定位提供器是开启的");List<String> allproviders = locationManager.getAllProviders();for (String provider : allproviders) {d("未开启的提供器:" + provider);locationManager.requestLocationUpdates(provider, 0, 0,bestEnabledlistener);// 没有一个可以用的时候随便开启一个都是最佳的}}}}/** 最佳策略提供器的监听 */private LocationListener bestlistener = new LocationListener() {@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {d("gps--bestlistener-onStatusChanged" + provider + " " + status);}@Overridepublic void onProviderEnabled(String provider) {d("gps--bestlistener-onProviderEnabled" + provider);registerListener();// 最好的可以用时,重新选择}@Overridepublic void onProviderDisabled(String provider) {d("gps--bestlistener-onProviderDisabled" + provider);}@Overridepublic void onLocationChanged(Location location) {localtionChange(location);}};/** 最佳策略提供器的监听 限制在已开启的提供器 */private LocationListener bestEnabledlistener = new LocationListener() {@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {d("gps--bestEnabledlistener-onStatusChanged" + provider + " "+ status);}@Overridepublic void onProviderEnabled(String provider) {d("gps--bestEnabledlistener-onProviderEnabled" + provider);}@Overridepublic void onProviderDisabled(String provider) {d("gps--bestEnabledlistener-onProviderDisabled" + provider);registerListener();// 可用中最好的关闭时,重新选择}@Overridepublic void onLocationChanged(Location location) {localtionChange(location);}};private void removeAllUpdate() {d("清除监听");if (null != locationManager) {if (null != bestlistener) {locationManager.removeUpdates(bestlistener);}if (null != bestEnabledlistener) {locationManager.removeUpdates(bestEnabledlistener);}}}@Overridepublic void onDestroy() {removeAllUpdate();super.onDestroy();}private void d(String msg) {LogUtils.d(Thread.currentThread().getName() + ":" + msg);}private void localtionChange(Location location) {d("定位:"+"( "+location.getLatitude()+" , "+location.getLongitude()+" ) "+location.toString());IParamsService paramsService = ParamsServiceImpl.getInstance();paramsService.setLocaltion(location);}}
权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />剩下就是启动这个服务
将定位数据写入参数文件提供读取
@SuppressLint("SimpleDateFormat")@Overridepublic void setLocaltion(Location location) {if (null != location) {setParams(ParamsConst.LOCATION_LAT, location.getLatitude() + "");setParams(ParamsConst.LOCATION_LON, location.getLongitude() + "");setParams(ParamsConst.LOCATION_IS_UPDATE, "1");setParams(ParamsConst.LOCATION_TIME_STAMP, new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));}}@Overridepublic LocationItem getLocation() {LocationItem location = new LocationItem();String isUpdate = getParams(ParamsConst.LOCATION_IS_UPDATE);setParams(ParamsConst.LOCATION_IS_UPDATE, "0");if (null != isUpdate && "1".equals(isUpdate)) {location.setLat(getParams(ParamsConst.LOCATION_LAT));location.setLon(getParams(ParamsConst.LOCATION_LAT));location.setTimeStamp(getParams(ParamsConst.LOCATION_TIME_STAMP));return location;}return null;}
0 0
- Android根据系统策略选择GPS定位
- android GPS定位系统
- Android GPS定位系统
- Android 定位系统(GPS)开发基础
- android的GPS定位跟踪系统
- Android:根据GPS信息在地图上定位
- GPS车载定位系统
- GPS定位系统
- Android GPS定位实现
- android GPS定位
- android模拟器定位GPS
- 利用GPS定位[android]
- android 获取GPS定位,
- Android:GPS卫星定位
- android gps 定位服务
- Android Gps 定位注意事项
- Android GPS 定位 1
- Android GPS定位
- MFC加载EXCEL代码
- java爬虫 爬取图书信息
- 【BZOJ 2257】【JSOI 2009】瓶子和燃料 【裴蜀定理】
- Maximum Subarray
- final、static、static final修饰引用类型时的区别
- Android根据系统策略选择GPS定位
- Linux驱动attribute
- 3、(lodash_gcy)移除数组中的假值元素
- numpy数组切片与索引
- 图像特征提取算法
- 项目总结
- 第一行代码 UI部分笔记(写一个通用的标题栏)
- Python 进阶_生成器 & 生成器表达式
- set