helo, i have a strange problem with app - when i use google's api for user location, the gps starts in second and goes to locate. but if i use mapbox, it takes up to 15 minutes to do what it does, then i have to turn off the screen and on again to show the gps logo at the bottom of the screen, then to turn off and on again to begin location. what could makes that. I have searched everywhere on the web for similar problems, but I found nothing. I used everything as it is described in http://www.mapbox.com for making it, and the problem still exists. Here is the code of Main activity:
import android.arch.lifecycle.Lifecycle;
import android.location.Location;
import android.location.LocationManager;
import android.os.PersistableBundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.android.core.location.LocationEngineListener;
import com.mapbox.android.core.location.LocationEnginePriority;
import com.mapbox.android.core.location.LocationEngineProvider;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin;
import com.mapbox.mapboxsdk.plugins.locationlayer.modes.CameraMode;
import com.mapbox.mapboxsdk.plugins.locationlayer.modes.RenderMode;
import java.util.List;
public class MbooooActivity extends AppCompatActivity implements OnMapReadyCallback,
LocationEngineListener, PermissionsListener{
private MapView mapView;
private MapboxMap mbm;
private PermissionsManager permissionsManager;
private LocationEngine locationEngine;
private LocationLayerPlugin locationLayerPlugin;
private Location lokation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Mapbox.getInstance(this,getString(R.string.toke));
setContentView(R.layout.activity_mboooo);
mapView=(MapView)findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
public void onMapReady(MapboxMap mapboxMap) {
mbm=mapboxMap;
enableLocation();
}
private void enableLocation(){
if(PermissionsManager.areLocationPermissionsGranted(this)){
initialiseLocationEngine();
initialiseLocationLayer();
}else{
permissionsManager=new PermissionsManager(this);
permissionsManager.requestLocationPermissions(this);
}
}
@SuppressWarnings("MissingPermission")
private void initialiseLocationEngine(){
locationEngine=new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
locationEngine.activate();
Location prevlok=locationEngine.getLastLocation();
if(prevlok!=null){
lokation=prevlok;
setCamera(prevlok);
}else{
locationEngine.addLocationEngineListener(this);
}
}
@SuppressWarnings("MissingPermission")
private void initialiseLocationLayer(){
locationLayerPlugin=new LocationLayerPlugin(mapView,mbm,locationEngine);
locationLayerPlugin.setLocationLayerEnabled(true);
locationLayerPlugin.setCameraMode(CameraMode.TRACKING);
locationLayerPlugin.setRenderMode(RenderMode.NORMAL);
Lifecycle lifecycle=getLifecycle();
lifecycle.addObserver(locationLayerPlugin);
}
private void setCamera(Location location){
mbm.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(),
location.getLongitude()),16.0));
}
@SuppressWarnings("MissingPermission")
@Override
public void onConnected() {
locationEngine.requestLocationUpdates();
}
@Override
public void onLocationChanged(Location location) {
if(location!=null){
lokation=location;
setCamera(lokation);}
}
@Override
public void onExplanationNeeded(List<String> permissionsToExplain) {
}
@Override
public void onPermissionResult(boolean granted) {
if(granted){
enableLocation();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
permissionsManager.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
@SuppressWarnings("MissingPermission")
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
if(locationEngine!=null){
locationEngine.requestLocationUpdates();
locationEngine.addLocationEngineListener(this);}
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
if(locationEngine!=null){
locationEngine.removeLocationEngineListener(this);
locationEngine.removeLocationUpdates();}
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
locationEngine.removeLocationEngineListener(this);
locationEngine.removeLocationUpdates();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
locationEngine.removeLocationUpdates();
locationEngine.removeLocationEngineListener(this);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}