GPS での実際の位置が一度だけ必要です。このコードでは、onLocationChanged が呼び出されることはありません。理由がわかりません。私がそれを呼ぶように:
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
0 秒ごと、0 メートルごとに実行する必要があります。動作するようにコードを変更するにはどうすればよいですか?
public class MapActivity extends FragmentActivity implements
LocationListener {
private final String TAG = getClass().getSimpleName();
private GoogleMap mMap;
private Location loc;
private Context ctx;
private radius;
LocationManager mLocationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
ctx = MapActivity.this;
radius = getRadius();
mMap = initMap();
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if (location != null) {
loc = location;
Log.v("Location Changed", location.getLatitude() + " and "
+ location.getLongitude());
mLocationManager.removeUpdates(this);
myPlaces = new GetPlaces(ctx, GAS_STATION, mMap, loc, radius);
myPlaces.execute();
Log.e(TAG, "location : " + loc);
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
編集:呼び出しを loc に移動しました:
myPlaces = new GetPlaces(ctx, GAS_STATION, mMap, loc, radius);
myPlaces.execute();
Log.e(TAG, "location : " + loc);
onLocationChange 内。このようにして、nullpointerException を取得しなくなりましたが、位置を取得するために 20 秒以上待つことができます。あまり良くありません...修正をすばやく入手する方法を知っている人がいれば!