2011-07-12 78 views
4

尝试在我的服务中获取LocationUpdates,但它似乎并未触发LocationListener。Android服务未收到位置更新

我的服务启动一个线程,然后循环一个Handler.postDelayed() - 我最初使用睡眠(30000),但我认为这可能已经阻止了locationUpdates。所有的服务不会是推出这个话题 - 和onStartCommand返回粘保持运行:

public class TST extends Thread { 

    final int DefaultNetworkTick = 120000; // 2 minutes 
    final int DefaultLocationTick = 20000; //600000; 
    boolean CustomLocationUpdateTick = false; // If the network requests faster updates 
    int CustomLocationUpdateTickMs = 600000; // Default 10 minutes 

    public boolean kill = false; 
    public Context context; 

    Handler handler = new Handler(); 

    Date nextNetworkReadTick; 

    @Override 
    public void run() {   
     Log.i("TST", "Start run() iteration"); 
     // Set the ticks to the appropriate values 
     // Network gets read every 2 minutes 

     nextNetworkReadTick = new Date(); 
     nextNetworkReadTick.setTime(nextNetworkReadTick.getTime() + DefaultNetworkTick); 
     Log.i("TST", "Set next Network tick to " + nextNetworkReadTick.toString()); 
     Looper.prepare(); 
     Log.i("TST", "Performing location update setup..."); 
     SetupLocationListenerDefault(); 
     handler.postDelayed(runFunc, 2000); 
     Looper.loop(); 
    } 

    // We do our networking and stuff in here 
    public Runnable runFunc = new Runnable(){ 
     public void run() 
     { 
      Log.i("TST", "run() iteration"); 

      if(new Date().after(nextNetworkReadTick)) { 
       // Set next tick 
       nextNetworkReadTick = new Date(); 
       nextNetworkReadTick.setTime(nextNetworkReadTick.getTime() + DefaultNetworkTick); 

       UpdateNetwork(); 
      } 

      handler.postDelayed(runFunc, 1000); 
     } 
    }; 

    private void UpdateNetwork() { 
      // TODO Auto-generated method stub 
    } 

    LocationManager locMgr; 

    PendingIntent locationUpdateIntentPending; 
    Intent locationUpdateIntent; 

    LocationListener locationListener = new LocationListener() 
    { 
      @Override 
      public void onLocationChanged(Location arg0) { 
        // TODO Auto-generated method stub 
        Log.i("TST", "OnLocationChanged: " + arg0.toString()); 
      } 

      @Override 
      public void onProviderDisabled(String provider) { 
        // TODO Auto-generated method stub 
        Log.i("TST", "OnProviderDisabled: " + provider);     
      } 

      @Override 
      public void onProviderEnabled(String provider) { 
        // TODO Auto-generated method stub 
        Log.i("TST", "OnProviderEnabled: " + provider); 
      } 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 
        // TODO Auto-generated method stub 
        Log.i("TST", "OnStatusChanged"); 
      } 

    }; 

    private void SetupLocationListenerDefault() { 
     // Reset location manager 
     if(locMgr != null) { 
       locMgr.removeUpdates(locationListener); 
       locMgr = null; 
     } 

     locMgr = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     String provider = locMgr.getBestProvider(criteria, true); 

     locMgr.requestLocationUpdates(provider, DefaultLocationTick, 0, locationListener); 
    } 

} 
+0

我知道这听起来很明显,但你确定你可以得到位置提升吗?我已经看过使用返回网络而不是gps的标准,如果你在里面,那么你可能实际上并不依赖于信号。你有没有在服务之外尝试过这段代码,看看是否有这个问题,也许把它放在程序的一个快速存根中,只是为了验证服务是否存在问题? – Idistic

回答

4

原来的代码工作正常。重新启动我的手机并开始获取更新 - 似乎Android已经卡住了某个地方!

+1

这不应该是答案,但它为我节省了很多挫折。谢谢! –

+0

我多次遇到同样的问题。 Google位置服务似乎不时停止工作。 – marbdq