#android #google-maps #location #google-maps-android-api-2
#Android #google-карты #Расположение #google-maps-android-api-2
Вопрос:
у меня следующая проблема: я хочу получить текущее местоположение, после чего я хочу нарисовать вокруг него несколько маркеров. Раньше я получал LocationListener
текущее местоположение, но когда я запускаю свое приложение, я вижу пустую карту, и через несколько секунд я получаю текущее местоположение и рисую маркеры. Я хочу сделать следующее: я хочу загрузить карту, когда получу текущее местоположение.Я не хочу видеть карту без маркеров. Мой код:
public class WhereAmIFragment extends BaseContainerFragment implements LocationListener {
private SupportMapFragment mMapFragment;
private LocationManager locationManager;
public static WhereAmIFragment newInstance() {
return new WhereAmIFragment();
}
private GoogleMap.OnMapClickListener mOnMapClickListener = new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_where_am_i, container, false);
mMapFragment = SupportMapFragment.newInstance();
getChildFragmentManager().beginTransaction().replace(R.id.map_container, mMapFragment).commit();
return root;
}
@Override
public void onStart() {
super.onStart();
mMapFragment.getMap().setMyLocationEnabled(true);
mMapFragment.getMap().setOnMapClickListener(mOnMapClickListener);
locationManager = (LocationManager) getActivity().getSystemService(getActivity().LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
}
@Override
public void onLocationChanged(Location location) {
locationManager.removeUpdates(WhereAmIFragment.this);
locationManager = null;
drawStops(new LatLng(location.getLatitude(), location.getLongitude()));
}
private void drawStops(LatLng latLng) {
DefaultCallback<ArrayList<Stop>> callback = new DefaultCallback<ArrayList<Stop>>(getActivity()) {
@Override
public void success(ArrayList<Stop> stops, Response response) {
Log.d("myLogs", "array list size= " stops.size());
for (int i = 0; i < stops.size(); i ) {
Log.d("myLogs", i ". " stops.get(i).getLng());
drawMarkers(stops);
}
}
};
mMapFragment.getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14.0f));
RequestDataBuilder builder = new RequestDataBuilder(getActivity()).prepareWhereAmIData(
latLng, 500);
EwayApi api = RestAdaptersProvider.getApi(new StopsConverter());
api.sendRequest(builder, callback);
}
private void drawMarkers(ArrayList<Stop> arrayList) {
for (int i = 0; i < arrayList.size(); i ) {
mMapFragment.getMap().addMarker(new MarkerOptions()
.position(arrayList.get(i).getLng())
.title(arrayList.get(i).getTitle()));
}
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
}
Комментарии:
1. Попробуйте использовать код прослушивателя местоположения в главном действии, а не при загрузке карты, чтобы вы могли напрямую обращаться к данным о местоположении при загрузке карты.
Ответ №1:
карта может быть инициализирована как,
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
map = fm.getMap();
map.setMyLocationEnabled(true);
map.setTrafficEnabled(true);
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
Вы можете добавить маркеры, такие как,
LatLng toPosition = new LatLng(Promolat, Promolon);
map.addMarker(new MarkerOptions()
.position(toPosition)
.title(promotions.getPromotionHeading().toString())
.snippet(merchants.getMerchantAddress().toString())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(toPosition, 15));
Комментарии:
1. как это может мне помочь? Где я должен инициализировать карту?
2. Пожалуйста, прочитайте мой вопрос еще раз. Я знаю, как получить текущее местоположение