2012-04-25 64 views
0

我有一個singelton線程類,它將gps指向我的服務器。課程持有並刷新gps位置。找不到GPS位置

FinderThread:

public class FinderThread extends Thread { 
    private static FinderThread SINGLETON; 
    public boolean isinterrupt = true; 
    public int maxage; 
    public int minage; 
    public int distance; 
    public String gender; 
    public String latitude; 
    public String longitude; 
    public String sid; 
    public Context ctx; 
    LocationManager gps; 
    boolean nav; 
    SharedPreferences pref; 
    private Handler dlh; 
    private Handler myLocationHandler; 
    boolean pause=false; 




    private FinderThread(Context ctx,Handler dlh, Handler myLocationHandler) { 
     this.ctx = ctx; 

     gps = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE); 
     gps.requestLocationUpdates(LocationManager.GPS_PROVIDER,60000, 20, llistener); 

     pref = ctx.getSharedPreferences("NFF", 0); 
     sid = pref.getString("sid", ""); 

     this.dlh = dlh; 

     if (myLocationHandler!=null) 
     { 
      this.myLocationHandler = myLocationHandler; 
     } 
     if(myLocationHandler != null) 
     { 
      myLocationHandler.sendEmptyMessage(0); 
     } 

    } 
    public static synchronized FinderThread getInstance(Context ctx,Handler dlh, Handler myLocationHandler) 
    { 
     if (SINGLETON == null) // falls null 
     { 
       SINGLETON = new FinderThread (ctx,dlh,myLocationHandler);//instanzieren 
     } 
     else 
     { 
      SINGLETON.myLocationHandler= myLocationHandler; 
      SINGLETON.dlh = dlh; 
      myLocationHandler.sendEmptyMessage(0); 
     } 
     return SINGLETON; 
    } 

    /* 
    @Override 
    public synchronized void start() { 
     if(SINGLETON != null) 
     { 
      SINGLETON.start(); 
     } 
    } 
    public synchronized void pause() 
    { 
     if(SINGLETON.getState()==State.RUNNABLE || SINGLETON.getState()==State.WAITING) 
     { 
       SINGLETON.pause = true; 

     } 
    } 
    public synchronized void tcontinue() 
    { 
     if(SINGLETON.getState()==State.RUNNABLE || SINGLETON.getState()==State.WAITING) 
     { 
       SINGLETON.pause = false; 

     } 
    } 
    public synchronized boolean isPaused() 
    { 
     return SINGLETON.pause; 
    } 
    */ 

    public synchronized void pause() 
    { 
     this.pause = true; 
    } 
    public synchronized boolean isPaused() 
    { 
     return this.pause; 
    } 
    public synchronized void tcontinue() 
    { 
       this.pause = false; 
    } 

    @Override 
    public void run() { 
     //String locationProvider = LocationManager.GPS_PROVIDER; 
     //Location lastpoint = gps.getLastKnownLocation(locationProvider); 

     //longitude = String.valueOf(lastpoint.getLongitude()); 
     //latitude = String.valueOf(lastpoint.getLatitude()); 

     try 
     { 
      while (isinterrupt) { 
       if(!pause) 
       { 
        Log.e("NFF", "Finder Thread Begin"); 
        RestConnection r = new RestConnection("finder", dlh, "POST"); 
        r.setParameter("minage", String.valueOf(minage)); 
        r.setParameter("maxage", String.valueOf(maxage)); 
        r.setParameter("distance", String.valueOf(distance)); 
        r.setParameter("gender", String.valueOf(gender)); 
        r.setParameter("latitude", String.valueOf(latitude)); 
        r.setParameter("longitude", String.valueOf(longitude)); 
        r.setParameter("sid", sid); 
        Log.e("NFF Finder Paramater", String.valueOf(minage)+" "+String.valueOf(maxage)+" "+String.valueOf(distance)+" "+String.valueOf(gender) + " "+String.valueOf(latitude)+" " +String.valueOf(longitude)+ " " + sid ); 

        r.start(); 
       } 

       Thread.sleep(10000); 
      } 
     } 
     catch (InterruptedException e) { 
      Log.e("NFF FT", "InterruptedException"); 
      isinterrupt = false; 
     } 
    } 
    private LocationListener llistener = new LocationListener(){ 

     @Override 
     public void onLocationChanged(Location location) { 
      if(String.valueOf(location.getLatitude())!= null) 
      { 
       latitude = String.valueOf(location.getLatitude()); 
       longitude = String.valueOf(location.getLongitude()); 
       if(myLocationHandler != null) 
       { 
        myLocationHandler.sendEmptyMessage(0); 
       } 
      } 


     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      Log.e("NFF", "GPS Disabled"); 
      isinterrupt = true; 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      Log.e("NFF", "GPS Enabled"); 

     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      // TODO Auto-generated method stub 

     } 

    }; 
    public void saveProperties() 
    { 
     Editor editor = pref.edit(); 
     editor.putInt("maxage", maxage); 
     editor.putInt("minage", minage); 
     editor.putInt("distance", distance); 
     editor.putString("gender", gender); 
     editor.putString("lat", latitude); 
     editor.putString("long", longitude); 
     editor.commit(); 

    } 
    public void loadProperties() 
    { 
     maxage = pref.getInt("maxage", -1); 
     minage = pref.getInt("minage", -1); 
     distance = pref.getInt("distance", -1); 
     gender = pref.getString("gender", "f"); 
     latitude = pref.getString("lat", "f"); 
     longitude = pref.getString("long", "f"); 
    } 
    public synchronized void pushSettings() 
    { 
     SINGLETON.maxage = maxage; 
     SINGLETON.minage = minage; 
     SINGLETON.distance = distance; 
     SINGLETON.gender = gender; 
     SINGLETON.latitude = latitude; 
     SINGLETON.longitude = longitude; 
    } 




} 

當我測試的仿真器應用程序,並設置與模擬器控制寄託都做工精細的位置。當我在我的手機上測試它時,機器人找不到位置。我已經測試了「GPS測試」應用程序,它在3分鐘內找到了5個衛星的位置。

請幫忙

+0

您是在室外還是在室內進行測試?,因爲gps在室內不起作用。 – 2012-04-25 20:59:35

+0

戶外 - >我寫道,應用程序「GPS測試」發現的位置 – user547995 2012-04-25 21:00:19

+0

你有沒有試過減少通知之間的時間和觸發通知所需的距離? – dymmeh 2012-04-25 21:05:09

回答

0

它確實看起來像你有一切。

您在FINE_LOCATION清單中給予自己許可,對嗎?

我會提出的一個建議是更改您的requestLocationUpdates(),以便它請求在它們之間的0時間和它們之間的0距離的修復。我看過的所有GPS接收器都會給你修復這個設置每秒一次,這幾乎是大多數GPS引擎的工作原理。就在你提出要求的一分鐘和二十米的可能性不大的情況下,你就會把你搞砸了。如果您通過此建議獲得修復,您可以從那裏開展工作,以最大限度地減少gps的運行時間。

祝你好運!