Снимок экрана приложения
Я пытаюсь реализовать MapView на вкладке в моем приложении, но возникают проблемы с реализацией его как фрагмента, а не действия.Мне удалось отобразить местоположение пользователя, но возникли проблемы, так как метод onLocationChanged, похоже, не вызывается.Не проще ли реализовать в качестве действия одну из вкладок и использовать фрагменты для других?
public class LocationFragment extends Fragment implements
OnMapReadyCallback,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {
private GoogleMap mGoogleMap;
private MapView mMapView;
private View mView;
private GoogleApiClient apiClient;
private LocationRequest locationRequest;
private LocationManager locationManager;
private Location lastKnowLocation;
private FragmentActivity myContext;
private Marker currentLocationMarker;
final int userRequestCode = 1;
public LocationFragment() {
}
@Overide
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
checkUserLocationPermission();
}
}
@Overide
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.fragment_location, container, false);
return mView;
}
@Overide
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mMapView = mView.findViewById(R.id.map);
if (mMapView != null) {
mMapView.onCreate(null);
mMapView.onResume();
mMapView.getMapAsync(this);
}
}
@Overide
public void onLocationChanged(Location location) {
lastKnowLocation = location;
if (currentLocationMarker != null) {
currentLocationMarker.remove();
}
LatLng currentLatLng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(currentLatLng);
markerOptions.title("Current Location");
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
currentLocationMarker = mGoogleMap.addMarker(markerOptions);
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(currentLatLng));
mGoogleMap.animateCamera(CameraUpdateFactory.zoomBy(16));
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
if (apiClient != null) {
if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, (android.location.LocationListener) LocationFragment.this);
}
}
}
@Overide
public void onConnected(@Nullable Bundle bundle) {
locationRequest = new LocationRequest();
locationRequest.setInterval(510);
locationRequest.setFastestInterval(510);
locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, (android.location.LocationListener) LocationFragment.this);
}
}