2011-06-23 27 views
1

私のアプリケーションで場所を更新するサービスがあります。 GPSを無効にしてアプリを起動すると、アンドロイドメニューに戻り、GPSを有効にして、最後にアプリケーションに戻ります(サービスは破棄されません)。onProviderEnabledは呼び出されません。誰も助けることができますか?ロケーションサービスonProviderEnabledは一度も呼び出されていません

更新:アプリを再起動すると、プロバイダが有効になります。のみonProviderEnabledは私が

super.onCreate(savedInstanceState); 

    //.... 

    // Bind location service 
    bindService(new Intent(this, LocationService.class), mConnection, Context.BIND_AUTO_CREATE); 

    //.... 

@Override 
protected void onDestroy() { 
    super.onDestroy();  
    // Unbind LocationService 
    ItemDetail.this.unbindService(mConnection); 
} 

を行うと、サービスがごでは

public class LocationService extends Service implements LocationListener { 
    LocationManager locationManager; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() {   
     locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){   

      // Update after minimum 5 minutes and if user has moved at least 100 meters. 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this);   

      Location loc = getBestLocation(locationManager); 
      if(loc!=null){ 
       GlobalVars.lat = (Double) (loc.getLatitude()); 
       GlobalVars.lng = (Double) (loc.getLongitude()); 
      } 
     } 
    } 

    public void onLocationChanged(Location loc) {   
     GlobalVars.lat = (Double) (loc.getLatitude()); 
     GlobalVars.lng = (Double) (loc.getLongitude()); 
    } 

    public static Location getBestLocation(LocationManager locationManager) { 

     Location location_gps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     Location location_network = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

     // If both are available, get the most recent 
     if(location_gps!=null && location_network !=null) { 
      return (location_gps.getTime() > location_network.getTime())?location_gps:location_network; 
     } 
     else if(location_gps==null && location_network ==null){ 
      return null; 
     } 
     else 
      return (location_gps==null)?location_network:location_gps; 

    } 

    public void onProviderEnabled(String s){ 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this); 
    } 
    public void onProviderDisabled(String s){ 
     locationManager.removeUpdates(this); 
     GlobalVars.lat = null; 
     GlobalVars.lng = null; 
    } 
    public void onStatusChanged(String s, int i, Bundle b){} 

    @Override 
    public void onDestroy() {  
     locationManager.removeUpdates(this); 
    } 
} 
+0

Hei!あなたは問題を管理しましたか?あなたのようなことをやろうとしているので、参考資料としてあなたのコードを使用して嬉しいです。 私はまだロケーションマネージャとサービスを使用してANRを実行する方法を混同しています... – Chris

答えて

2

ある場所を必要とするすべての活動では...

と呼ばれていませんLocationService.onCreate()メソッドは、GPSプロバイダが無効になっているかどうかをチェックします。

if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){

しかし、それがすでに有効になっている場合にのみ、サブスクリプションを開始します。リスナーはLocationManagerに登録されておらず、ロケーションプロバイダの更新を無効にしたり有効にしたりすることはありません。代わりにonCreateメソッドを常に呼び出すように変更してください。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this);

関連する問題