2012-03-09 10 views
0

私のアプリケーションでは、私は現在の場所を取得するために10秒のタイマーを設定していますlocationManager.requestLocationUpdates();が、問題助けて...以下は更新された場所を取得できませんでした

がサービスで書かれた私のコードです..私が更新された場所ではなく、それはアプリケーションが起動している同じ緯度と経度を与え得るcouldntのことであると提案が

public class DemoService extends Service{ 


    LocationManager locationManager; 
    public Timer timer; 
    public static int i; 
    private String FILE_NAME = "location.txt"; 
    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     // TODO Auto-generated method stub 
     super.onStart(intent, startId); 

     locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

     Toast.makeText(getApplicationContext(), "onStart()....", Toast.LENGTH_SHORT).show(); 
     timer = new Timer(); 
     timer.schedule(new mainTask(), 0, 10*1000); 

    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 

     Toast.makeText(getApplicationContext(), "onCreate()....", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     Toast.makeText(getApplicationContext(), "onDestroy()....", Toast.LENGTH_SHORT).show(); 
     timer.cancel(); 
    } 

    private class mainTask extends TimerTask 
     { 
      public void run() 
      { 
       toastHandler.sendEmptyMessage(0); 
      } 
     }  



     private final Handler toastHandler = new Handler() 
     { 
      @Override 
      public void handleMessage(Message msg) 
      { 
       Toast.makeText(getApplicationContext(), "test "+(i), Toast.LENGTH_SHORT).show(); 
       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new MyLocationListerner()); 
      } 
     };  


     public class MyLocationListerner implements LocationListener{ 


      @Override 
      public void onLocationChanged(Location location) { 
       // TODO Auto-generated method stub 
       i++; 
       Toast.makeText(DemoService.this, "\nLat : "+location.getLatitude()+"\nLog : "+location.getLongitude(), Toast.LENGTH_SHORT).show(); 
       saveToFile(location); 
       locationManager.removeUpdates(this); 

      } 

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

       Toast.makeText(DemoService.this,"Got onLocationChanged..",Toast.LENGTH_SHORT).show(); 
       System.out.println("Got onStatusChanged"); 

      } 

      @Override 
      public void onProviderEnabled(String provider) { 
       // TODO Auto-generated method stub 
       Toast.makeText(DemoService.this,"Got onLocationChanged..",Toast.LENGTH_SHORT).show(); 
       System.out.println("Got onProviderEnabled"); 
      } 

      @Override 
      public void onProviderDisabled(String provider) { 
       // TODO Auto-generated method stub 
       Toast.makeText(DemoService.this,"Got onLocationChanged..",Toast.LENGTH_SHORT).show(); 
       System.out.println("Got onProviderDisabled"); 
      } 
+0

の少ない消費でアラームマネージャの助けを借りて、現在位置を取得した場所によってCWAC Location pollerによって生じた効果を達成し、これを試してみてください。ただ、この行を追加します。 locationManager.requestLocationUpdates( LocationManager.G PS_PROVIDER、refreshInterval、50、locationListener); –

+0

現在位置を高精度または低精度で取得する方法はいくつかありますが、ネットワークプロバイダを使用していますので、移動するビット幅が同じであることがわかります。 GPSをポーリングする必要があるかもしれません。この投稿をチェックしてくださいhttp://stackoverflow.com/a/6775456/28557 –

+0

こんにちはmayurは動作していないとそれはGPSをオンにする必要があります。場所のネットワークプロバイダを取得することはできません... – NullPointerException

答えて

関連する問題