Android 如何一次获得当前位置并在它之后加载地图?
我有下一个问题:我想得到当前位置,然后我想在它周围画一些标记。我使用了Android 如何一次获得当前位置并在它之后加载地图?,android,google-maps,location,google-maps-android-api-2,Android,Google Maps,Location,Google Maps Android Api 2,我有下一个问题:我想得到当前位置,然后我想在它周围画一些标记。我使用了LocationListener获取当前位置,但当我运行应用程序时,我看到了空地图,几秒钟后,我获取了当前位置并绘制了标记。我想做下一步:我想在获得当前位置后加载地图。我不想看到没有标记的地图。我的代码是: public class WhereAmIFragment extends BaseContainerFragment implements LocationListener { private SupportMapFra
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) {
}
公共类,其中MifFragment扩展BaseContainerFragment实现LocationListener{
私营部门的支持;
私人场所经理场所经理;
public static wheremifragment newInstance(){
返回新的wheremifragment();
}
私有GoogleMap.OnMapClickListener mOnMapClickListener=新建GoogleMap.OnMapClickListener(){
@凌驾
公共无效的点击(LatLng LatLng){
}
};
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根=充气机。充气(R.layout.fragment\u其中\u am\u i,容器,false);
mMapFragment=SupportMapFragment.newInstance();
getChildFragmentManager();
返回根;
}
@凌驾
public void onStart(){
super.onStart();
mMapFragment.getMap().setMyLocationEnabled(true);
mMapFragment.getMap().setOnMapClickListener(mOnMapClickListener);
locationManager=(locationManager)getActivity().getSystemService(getActivity().LOCATION\u服务);
locationManager.RequestLocationUpdate(locationManager.NETWORK\u提供程序,0,0,此);
}
@凌驾
已更改位置上的公共无效(位置){
locationManager.RemoveUpdate(wheremiFragment.this);
locationManager=null;
绘图停止(新车床(location.getLatitude(),location.getLongitude());
}
专用空位止动器(LatLng LatLng){
DefaultCallback=新的DefaultCallback(getActivity()){
@凌驾
public void成功(ArrayList停止,响应){
Log.d(“myLogs”,“数组列表大小=“+stops.size());
对于(int i=0;i
}地图可以初始化为
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));
这对我有什么帮助?我应该在哪里初始化地图?请再次阅读我的问题。我知道如何获取当前位置尝试在主活动中执行位置侦听器代码,而不是在加载地图时执行,以便可以在加载地图时直接访问位置数据。