package com.ic.protocol;\r
\r
+import android.content.Context;\r
import android.location.Criteria;\r
import android.location.GpsSatellite;\r
import android.location.GpsStatus;\r
\r
public void onStatusChanged(String paramString, int paramInt, Bundle paramBundle) {}\r
\r
+ public boolean gpsColdStart(){\r
+//冷启动\r
+ Bundle bundle = null;\r
+ locationManager.sendExtraCommand("gps", "force_xtra_injection", bundle); //command\r
+ locationManager.sendExtraCommand("gps", "force_time_injection", bundle);\r
+ boolean b1 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundle);\r
+ return b1;\r
+\r
+ }\r
+\r
+ public boolean gpsWormStart(){\r
+\r
+//温启动\r
+ Bundle bundleWarm = new Bundle();\r
+ bundleWarm.putBoolean("ephemeris", true);\r
+ locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleWarm); //command\r
+ locationManager.sendExtraCommand("gps", "force_time_injection", bundleWarm);\r
+ boolean b2 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleWarm);\r
+\r
+ return b2;\r
+ }\r
+\r
+ public boolean gpsHotStart(){\r
+//热启动\r
+ Bundle bundleHot = new Bundle();\r
+ bundleHot.putBoolean("almanac", true);\r
+ locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleHot); //command\r
+ locationManager.sendExtraCommand("gps", "force_time_injection", bundleHot);\r
+ boolean b3 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleHot);\r
+ return b3;\r
+ }\r
private GpsStatus.Listener statusListener = new GpsStatus.Listener() {\r
public void onGpsStatusChanged(int event) { // GPS状态变化时的回调,如卫星数\r
GpsStatus status = locationManager.getGpsStatus(null); //取当前状态\r
\r
count++;\r
}\r
- sb2.append("搜索"+searchCout+"次,搜索到卫星个数(SNR>0):" + numSatelliteList.size()+" \n Max 3 SNRs[ " );\r
+ sb2.append("搜索"+searchCout+"次,搜索到卫星个数:"+maxSatellites+" , (SNR>0):" + numSatelliteList.size()+" \n Max 3 SNRs[ " );\r
for (int i=0;i<max3Satellite.size();i++){\r
sb2.append(max3Satellite.get(i).getSnr());\r
sb2.append(", ");\r
}\r
sb2.append(" ]");\r
- if (numSatelliteList.size()< 1){\r
+ // 卫星总数小于2 ,或者 snr小于20\r
+ if (numSatelliteList.size()< 3 && (max3Satellite.size()>0?(max3Satellite.get(0).getSnr()<20?true:false) : true)){\r
noSignalCount++;\r
}\r
}\r
\r
if (searchCout>SearchTimeout){\r
- sb2.append(" 搜索"+searchCout+"次,超过"+SearchTimeout+"限制退出GPS定位");\r
+ sb2.append(" 搜索"+searchCout+"次未定位,超过"+SearchTimeout+"限制退出GPS定位");\r
gpsMode=GPS_CURRENT_STATUS.GPS_TIMEOUT;\r
runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);\r
\r
Logger.i( sb.toString());\r
\r
FileOutputUtil.fileOutput(this.runtime.getContextProxy().context,"GPS",sb.toString());\r
- runtime.getLocationInstance().setLocation(location.getLatitude(),location.getLongitude(),location.getSpeed(),0,status.getMaxSatellites());\r
+ runtime.getLocationInstance().setLocation(latitude,longitude,speed,0,status.getMaxSatellites());\r
}\r
\r
}\r
\r
\r
public boolean startListen() {\r
+\r
Criteria criteria = new Criteria();\r
- criteria.setAccuracy(Criteria.ACCURACY_FINE);\r
- criteria.setAltitudeRequired(false);\r
- criteria.setBearingRequired(false);\r
- criteria.setCostAllowed(true);\r
- criteria.setPowerRequirement(Criteria.POWER_LOW);\r
+ criteria.setAccuracy(Criteria.ACCURACY_FINE);// 设置为最大精度\r
+ criteria.setAltitudeRequired(false);//不要求海拔信息\r
+ criteria.setBearingRequired(false);// 不要求方位信息\r
+ criteria.setCostAllowed(true);//是否允许付费\r
+ criteria.setPowerRequirement(Criteria.POWER_LOW);// 对电量的要求\r
+\r
String provider = locationManager.getBestProvider(criteria,true);\r
+\r
Logger.i("GPS StartListen with Provider "+provider);\r
this.locationManager.requestLocationUpdates(provider, 0L, 0.0F, this);\r
this.listening = true;\r