2011-03-17 27 views
0

私は誰かがこれについていくつかの光を当てることを望んでいました。私は2.2からの突然の私のコードが2.3でうまくいかない理由を理解しようとしています。私は少し困惑しています。これは動作していますが、現在はNULLポインタ例外をスローしているコードです。Android geolocationは2.2では動作しますが、2.3では動作しません

@Override 
public void onStart(Intent intent, int startId) { 
    LocationListener locationListener = new LocationListener() { 
     public void onLocationChanged(Location l){ 
     Log.i("MYSERVICE", "LocationChanged " + l); 
     } 
     public void onStatusChanged(String provider, int status, Bundle Extras) {} 
     public void onProviderEnabled(String provider){ 
     Log.i("MYSERVICE", "ProviderEnabled " + provider); 
     } 
     public void onProviderDisabled(String provider) {} 
     }; 

     lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
    super.onStart(intent, startId); 
    String location = getLocation(); 
} 


public String getLocation() { 
    String provider = LocationManager.GPS_PROVIDER; 
    Location location = lm.getLastKnownLocation(provider); 
    Double lat = location.getLatitude(); 
    Log.i("lat", lat.toString()); 
    double lng = location.getLongitude(); 
    String writeString = lat+"&"+lng; 
    return writeString; 
} 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

私は2.3エミュレータも使用しています。どんな助けでも大歓迎です、歓声!

答えて

1

getLastKnownLocation以前の場所がない場合はnullを返すことができます。その場合は、登録したリスナーとの値がonLocationChangedになるまで待つ必要があります。

-1

それは、Android 2.3をlm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

に「0,0」で動作しないようですあなたは、少なくとも1および1に、これらの2つのパラメータを設定する必要があります。 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, locationListener);

+1

これは単に間違っています。 [the docs](http://developer.android.com/reference/android/location/LocationManager.html)から:minTimeが0より大きい場合、電力を節約するためにLocationManager間のminTimeミリ秒間、LocationManagerが潜在的に休止する可能性があります。 minDistanceが0より大きい場合、デバイスはminDistanceメーターで移動する場合にのみブロードキャストされます。 **できるだけ頻繁に通知を受けるには、両方のパラメータを0に設定してください。** –

+0

なぜあなたは否定的な投票をしましたか?はい、可能な限り頻繁に通知を取得するには、両方を0に設定する必要がありますが、2.3ではGingerbreadがうまくいかないことは事実です!私はこれを試して、2.2(Froyo)で動作しましたが、2.3では動作しませんでした。 – Alin

+2

私はそれが働いているので投票しました。エミュレータで動作し、デバイス上で動作し、APIレベル1以降で動作していたドキュメントに従って動作します。ドキュメントがまっすぐに間違っていると主張する場合は、いくつかのエビデンス。それ以外の場合は、コードで間違っているとか、デバイスで間違っていると推測するのが最善です。 –

関連する問題