2011-07-12 25 views
4

私のサービスでLocationUpdateを取得しようとすると、LocationListenerが起動しないようです。Androidサービスが位置情報の更新を受信しない

サービスがスレッドを開始し、Handler.postDelayed()でループします。私はもともとsleep(30000)を使用していましたが、これはlocationUpdatesを妨げている可能性があると考えました。すべてのサービスはこのスレッドを起動し、onStartCommandはSTICKYを返して実行し続けます。

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 Location Servicesは時々動作しなくなるようです。 – marbdq

関連する問題