2011-07-12 23 views
0

getLastKnownLocationは常にnull値を返します。私はエミュレータ上でgeo fixとgpsを有効にしました。ただし、エミュレータでこれを実行すると、通知バーにGPS信号が表示されません。私のコードに間違いがありますか?ありがとう。アンドロイドから緯度と経度を取得できません

public void onCreate(Bundle savedInstanceState) { 
    LocationManager location = null; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.near_layout); 

    location = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.NO_REQUIREMENT); 
    criteria.setPowerRequirement(Criteria.NO_REQUIREMENT); 
    String bestProvider = location.getBestProvider(criteria, true); 

    LocationListener ll = new mylocationlistener(); 


    Location loc = location.getLastKnownLocation(bestProvider); 
    if(loc != null) 
    { 
     double latitude = loc.getLatitude(); 
     double longitude = loc.getLongitude(); 
     Toast.makeText(nearPlace.this, " nice" + latitude, Toast.LENGTH_LONG).show(); 
    }else{ 
     Toast.makeText(nearPlace.this, "Location not available. GPS is not enabled.", Toast.LENGTH_LONG).show(); 
    } 
    location.requestLocationUpdates(bestProvider, 0, 0, ll); 
} 

private class mylocationlistener implements LocationListener { 

    @Override 
    public void onLocationChanged(Location location) { 
      Toast.makeText(nearPlace.this, " nice" + location.getLatitude(), Toast.LENGTH_LONG).show(); 
      nearPlaceDownloaderTask getNearPlace = new nearPlaceDownloaderTask(); 
      getNearPlace.execute(ANDROID_WEB_LINK + "gt.php?la=" + location.getLatitude() + "&lo=" + location.getLongitude()); 

    } 
    public void onProviderDisabled(String provider) {} 
    public void onProviderEnabled(String provider) {} 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 

} 
+0

私は 'onResume()'で 'requestLocationUpdates'を実行することをお勧めします。 'onPause()'で位置更新を登録解除します。 –

答えて

0

理由を返されたものを提供コメントで求めていた理由であるだけでなく答えるポールを見てみましょう、ですあなたは正確さに気にしないので、GPS上でネットワークロケーションを使用することを好むでしょう。 20メートルほどの精度を指定すると、おそらく自動的にGPSが呼び出されます。

手動bestProviderをオーバーライドし、GPSの位置情報の更新を起動するには:

bestProvider = LocationManager.GPS_PROVIDER; 

あなたは本当に2行のコードにこれを簡素化することができます。

LocationManager locationManager = 
      (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, interval, 
      precision, listener); 

は、リスナーの登録を解除することを忘れないでください:

locationManager.removeUpdates(listener); 
0

はまた、また、あなたがモック場所はエミュレータで設定可能にしていることを確認してください

geofix not workingこれをチェックアウトする場合があります。

criteria.setAccuracy(Criteria.NO_REQUIREMENT); 

アンドロイド:あなたは以下の条件を指定しているので、私はあなたのコードが動作していない

+0

私はtelnetとgeo fix locationを使ってこれを有効にしました。 – davidlee

+0

@davidlee Ok、それは場所を与えられていますか?最後に呼び出された呼び出しは、修正が確立されていない場合はnullを返します。また、あなたの基準設定によって返されているプロバイダは何ですか?ポールのコメントも当てはまりますが、最初の修正を受けるのを止めるべきではありません。また、Telnetを使用しているときにgeoFixについて多くの人々が不平を言うのを見て、それが問題かもしれないかどうかを見るために直接DDMSのアプローチを試みましたか? – Idistic

関連する問題