2013-03-03 14 views
5

アンドロイドで現在の正確な位置座標を取得したいと考えています。私はモバイルがWifiのインターネット接続に接続されている場合、私は場所を取得することができますが、他の場合、どこに行くと、現在の位置座標を与えていないそれ以外のインターネット接続が利用できません。代わりに最後の位置座標を与える。例えばどのようにインターネット接続なしでアンドロイドの現在の正確な位置を取得するには?

は現在、私は街で午前とWiFi接続上で現在の座標を取得し、私は現在の座標を取得することはできませんよ市Bに移動します。これの代わりに、最後の位置座標を与える。

誰でも私にどのようにインターネット接続なしで現在の場所を取得できますか?

public Location getLocation() { 
    try { 
     locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE); 

     // getting GPS status 
     isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

     // getting network status 
     isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      // First get location from Network Provider 
      if (isNetworkEnabled) { 
       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       if (locationManager != null) { 
        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
        } 
       } 
      } 

      // if GPS Enabled get lat/long using GPS Services 
      if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return location; 
} 

/** 
* Stop using GPS listener 
* Calling this function will stop using GPS in your app 
* */ 
public void stopUsingGPS(){ 
    if(locationManager != null){ 
     locationManager.removeUpdates(GetLocations.this); 
    } 
} 

/** 
* Function to get latitude 
* */ 
public double getLatitude(){ 
    if(location != null){ 
     latitude = location.getLatitude(); 
    } 
    return latitude; 
} 

/** 
* Function to get longitude 
* */ 
public double getLongitude(){ 
    if(location != null){ 
     longitude = location.getLongitude(); 
    } 
    return longitude; 
} 
+1

アンドロイドとして見ているのはAGPSを使用しているためです。 –

+0

@Raghav Sood私の問題を解決する方法はありませんか? –

+0

AGPSはAssisted GPSの略です。この場合、GPSモジュールはインターネットから取られたデータによって支援される。 No internet =いいえAGPS –

答えて

1

あなたが表示したコードは、あなたのクラスのgetLocationメソッドです。恐らくあなたのクラスもLocationListenerを実装しているでしょうか? (あなたがリスナーとして「この」requestLocationUpdatesで割り当てるので、それを見ないんと仮定。)

プロバイダを経由して位置情報の更新が非同期ているので、あなたが示されている方法がしか最後の既知の位置を返します。リスナーの登録を介して位置情報を取得することを指定し、リスナーは、定期的に(実際のデバイスの機能と状況に基づいて、設定に基づいて)更新を取得します。あなたは登録後直ちにその場所を返さないでしょう。

あなたの質問の場合、ネットワークに接続されていない間に位置情報を取得する場合は、GPSプロバイダを使用する必要があります(データネットワークに接続されていない状態でも機能します)。既にGPSプロバイダのリスナを登録していれば、リスナのコールバック(onLocationChanged(Location location))を使って位置の更新を取得します。

onLocationChangedコールバックは何をしますか?

GPSプロバイダを登録してから数秒〜数分の場所情報が更新されます(使用しているデバイスのハードウェアや環境条件によっては、GPSは複数の衛星を使用し、動作します空がはっきりしている方が速く、屋内にいる場合や信号が遮られている場合は、まったく動作しないことがあります)。

リスナーが更新された位置情報を取得するのを待つことに加えて、最も単純な別個の方法を使用して最後の既知の場所を取得し、最良のプロバイダに登録することを検討することもできます。いくつかの単純なループとあなたが興味を持っているCriteriaを使用することができます(COARSE対FINE、LOW_POWERかどうかなど)。

Android開発者はこのドキュメントと「Protips for Location」オープンソースのサンプルアプリケーションと「Deep Dive」ブログ記事(これは他のすべてのリソースへのリンクがあります):http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html

-2

インターネットとGPSがなければ、GSM(Cell Network)に基づいて位置情報を取得できます。

NETWORK_PROVIDERは、これまで使用可能だったGSMまたは無線LANで解決します。明らかにWi-Fiをオフにすると、GSMが使用されます。しかし、セルネットワークの精度は500mから2000Mまで変化する可能性があります。

+0

でお手伝いすることができます。ポスターは既にネットワークプロバイダについて知っていますが、元の質問でそれを割り当てています。問題は、彼がリスナーを待つことではないということです。 (また、ネットワークプロバイダがGSMやWifiを使用するとは限りません。すべてのデバイスがGSMであるとは限りません。ネットワークプロバイダーは500m以上の精度がありますが、確かにそうではないかもしれませんが、それは最善のケースではありません。 –

関連する問題