//开启服务在后台获得gps坐标,想要的时候数据的时候,开启这个服务,将坐标保存到xml配置文件中,然后取出来即可 public class GPSService extends Service { // 用到位置服务 private LocationManager lm; private MyLocationListener listener; public void onCreate() { super.onCreate(); lm = (LocationManager) getSystemService(LOCATION_SERVICE);//得到位置服务 listener = new MyLocationListener(); // 注册监听位置服务 // 给位置提供者设置条件 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置参数细化: // criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度 // criteria.setAltitudeRequired(false);//不要求海拔信息 // criteria.setBearingRequired(false);//不要求方位信息 // criteria.setCostAllowed(true);//是否允许付费 // criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求 String proveder = lm.getBestProvider(criteria, true);//得到当前可用的最好定位服务名称 lm.requestLocationUpdates(proveder, 0, 0, listener);//注册监听位置服务 } class MyLocationListener implements LocationListener { /** * 当位置改变的时候回调 */ public void onLocationChanged(Location location) { String longitude = "j:" + location.getLongitude() + "\n";//得到经度 String latitude = "w:" + location.getLatitude() + "\n";//纬度 String accuracy = "a" + location.getAccuracy() + "\n";//精确度 // 发短信给安全号码 // 把标准的GPS坐标转换成火星坐标(地图上的坐标是由标准的坐标通过算法算出火星坐标的,所以真实gps坐标在地图上显示偏差好大) //所以把标准的gps坐标转换成火星坐标,再在地图上显示就准确了。 // InputStream is; // try { // is = getAssets().open("axisoffset.dat"); // ModifyOffset offset = ModifyOffset.getInstance(is); //将标准的坐标点传入转换成火星坐标 // PointDouble double1 = offset.s2c(new PointDouble(location.getLongitude(), location.getLatitude())); // longitude ="j:" + offset.X+ "\n"; // latitude = "w:" +offset.Y+ "\n"; // // } catch (Exception e) { // e.printStackTrace(); // }finlly{ is.close(); } //将坐标保存到xml配置文件中 SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE); Editor editor = sp.edit(); editor.putString("lastlocation", longitude + latitude + accuracy); editor.commit(); } /** * 当状态发生改变的时候回调 开启--关闭 ;关闭--开启 */ @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } /** * 某一个位置提供者可以使用了 */ @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } /** * 某一个位置提供者不可以使用了 */ @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } } public void onDestroy() { super.onDestroy(); // 取消监听位置服务 lm.removeUpdates(listener); listener = null; } } 需要的权限: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 17:28:41