2016-08-16 11 views
4

私は練習のための天気予報アプリを構築しようとしていると私は場所を取得しようとする問題に実行されてきました。私は人々が融合位置APIを介してgetLastLocationを使用することを提案していることをお読みになりました。問題は、デバイスに登録されている位置をまだ持っていなければnullになることです。私はエミュレータを使用してこの時間が珍しい時代を使用して気づいたが、私はまだ適切にそれを処理する私のアプリが欲しい。あなたがこれに遭遇するかもしれない1つの事例は、単にGPSをオフにしてからオンにした場合、または電話がオンになった場合です。私がしたことの1つは、getLastLocationがnullに戻り、アップデートをリクエストすることですが、デバイスが更新されたロケーションを登録するのを待たなければならないことです。これは天気アプリですべてのデータに基づいており、同じ問題を抱えています。他のアプリに気づいたことはありませんが、実際にはGoogleマップをロードして場所を登録する必要があることがあります。 Google Mapsは場所の更新をどのように強制しますか?ここに私のgetLocationメソッドからの例です:どのようにデバイスの場所を取得する

public void getLocation() throws SecurityException { 
    boolean gps_enabled; 
    LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    if (gps_enabled) { 

     Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     if (location != null) { 
      startGetForecast(location); 
     } else { 
      LocationRequest request = LocationRequest.create(); 
      request.setNumUpdates(1); 
      request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, request, this); 
     } 
    } 
    else { 
     AlertDialogFragment alertDialogFragment = new AlertDialogFragment(); 
     alertDialogFragment.setErrorTexts("Location Unavailable", "Could not retrieve location information.", "Exit"); 
     alertDialogFragment.show(getSupportFragmentManager(), "Location Unavailable"); 
    } 
} 
+0

を再生サイドノートは、なぜあなたが安全な場所の頭痛になる融合ロケーションプロバイダのAPIを使用しないでください。 –

+0

融合位置APIを使用していますか?私の問題は、融合位置APIを使用して最後の場所がない場合です。 – jBob

+0

私が間違っていない場合は、最後の場所は、gps、wifi、またはあなたの電話網のような任意の場所プロバイダから取得できます。コード内にgpsのオン/オフを尋ねるif文があります。場所はありませんか? if文のテンポラリーを無効にして、何かを得るかどうか確認してください。電話ネットワークやWi-Fiの信号範囲を確保してください。 –

答えて

1

注:この答えは、直接の質問に答えていないようですが、彼のコードは、一般的にはOKだったようOPで(問題のコメント)をおしゃべりした後が、条件に聞こえる可能性があり問題の周りに、この答えはOPを満足しています。

幸いにも、標準ライブラリは、Googleが コードを手に入れる唯一の方法ではありません。標準ライブラリに加えて、Google プロバイダのPlayサービス。これは、Google Playストアアプリケーションの横にインストールされている共通サービスのセットです( )。これを修正するために、 場所の混乱、GoogleはPlayで新しいロケーションサービスを出荷しました サービスは、融合ロケーションプロバイダと呼ばれます。

これらのライブラリ は別のアプリケーションで動作しているため、実際にはアプリケーション がインストールされている必要があります。 これは、Playストアアプリ がインストールされていて最新の状態のアプリケーションのみが使用できることを意味します。

だから、結論は次のとおりです。

  1. あなたは上記のように、あなたのデバイス上でアプリケーションをテストする必要があります。セルタワー
  2. のWiFi接続から

    1. GPS無線
    2. 粗ポイント:
    3. もし融合ロケーション・プロバイダAPIを使用しているので、それは、APIが自動的に以下のいずれかのソースから最後の位置を決定する手段

  3. 条件のであれば、あなたが簡単にあなたのコード

  4. からGPSを削除することができ
  5. GPS信号を使用する必要がある場合は、建物、研究室、自宅またはオフィスの外に出なければなりません。

上記のリソースでさらに詳しく調べるには、多くのオンラインリソースがあります。

資源:答えの最初の部分、それのソースがあるから:

Androidのプログラミング:ビッグオタクランチガイド
第2版
章31ページ552 Googleの下だけでサービス

+0

@DanielNugent私は同意しますが、あなたが入力を持っている場合、私はあなたから聞いてより多くのことになります –

関連する問題