Comme j'utilise MAPBOX dans mon application.Je ne sais pas comment obtenir les lat et long actuels. J'ai utilisé cette méthode pour obtenir l'emplacement actuel.Mais sa référence d'objet null s'affiche.Veuillez m'aider à résoudre mon problème
mapView = (MapView)view. findViewById(R.id.mapView);
mapView.setStyleUrl(Style.MAPBOX_STREETS);
mapView.onCreate(savedInstanceState);
//Add a mapBoxMap
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
mapboxMap.setMyLocationEnabled(true);
// Set the Origin waypoint to the devices location
Position Origin = Position.fromCoordinates(mapboxMap.getMyLocation().getLongitude(), mapboxMap.getMyLocation().getLatitude());
Log.i("RR","mapboxMap.getMyLocation();"+Origin);
// Log.i("RR","mapboxMap.getMyLocation();"+mapboxMap.getMyLocation().getLongitude());
mapboxMap.getUiSettings().setZoomControlsEnabled(true);
mapboxMap.getUiSettings().setZoomGesturesEnabled(true);
mapboxMap.getUiSettings().setScrollGesturesEnabled(true);
mapboxMap.getUiSettings().setAllGesturesEnabled(true);
}
});
mapboxMap.setMyLocationEnabled(true);
a été deprecated
.
Vous devez utiliser locationEngine
pour obtenir lat et long comme ceci
locationEngine = new LostLocationEngine(MainActivity.this);
locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
locationEngine.setInterval(5000);
locationEngine.activate();
Location lastLocation = locationEngine.getLastLocation();
utiliser lastLocation.getLatitude()
, lastLocation.getLongitude()
Après avoir passé une journée de recherche, j’ai eu les résultats Voici le code complet de l'emplacement actuel de l'utilisateur MapBox pour obtenir la valeur .
import Android.Manifest;
import Android.annotation.SuppressLint;
import Android.content.pm.PackageManager;
import Android.location.Location;
import Android.support.annotation.NonNull;
import Android.support.v4.app.ActivityCompat;
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 Main2Activity extends AppCompatActivity implements OnMapReadyCallback, LocationEngineListener, PermissionsListener {
private MapView mapView;
private MapboxMap map;
LocationEngine locationEngine;
LocationLayerPlugin locationLayerPlugin;
PermissionsManager permissionsManager;
Location originLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Mapbox.getInstance(this, "YOUR_MAPBOX_KEY");
setContentView(R.layout.activity_main2);
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
public void onMapReady(MapboxMap mapboxMap) {
/* LocationPluginActivity.this.map = map;
enableLocationPlugin();*/
map = mapboxMap;
locationEnable();
mapboxMap.getUiSettings().setZoomControlsEnabled(true);
mapboxMap.getUiSettings().setZoomGesturesEnabled(true);
mapboxMap.getUiSettings().setScrollGesturesEnabled(true);
mapboxMap.getUiSettings().setAllGesturesEnabled(true);
}
void locationEnable() {
if (PermissionsManager.areLocationPermissionsGranted(this)) {
intialLocationEngine();
intializLocationLayer();
} else {
permissionsManager = new PermissionsManager(this);
permissionsManager.requestLocationPermissions(this);
}
}
void intialLocationEngine() {
locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
locationEngine.activate();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Location lastLocation = locationEngine.getLastLocation();
if (lastLocation != null) {
originLayout = lastLocation;
setCamerpostion(lastLocation);
} else {
locationEngine.addLocationEngineListener(this);
}
}
void intializLocationLayer() {
locationLayerPlugin = new LocationLayerPlugin(mapView, map, locationEngine);
locationLayerPlugin.setLocationLayerEnabled(true);
locationLayerPlugin.setCameraMode(CameraMode.TRACKING);
locationLayerPlugin.setRenderMode(RenderMode.NORMAL);
}
void setCamerpostion(Location camerpostion) {
map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(camerpostion.getLatitude(), camerpostion.getLongitude()), 13.0));
}
@Override
public void onConnected() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationEngine.requestLocationUpdates();
}
@Override
public void onLocationChanged(Location location) {
if (location != null) {
originLayout = location;
setCamerpostion(location);
}
}
@Override
public void onExplanationNeeded(List<String> permissionsToExplain) {
}
@Override
public void onPermissionResult(boolean granted) {
if (granted) {
locationEnable();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@SuppressWarnings("MissingPermission")
@Override
public void onStart() {
super.onStart();
if (locationEngine != null)
locationEngine.requestLocationUpdates();
mapView.onStart();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onStop() {
super.onStop();
mapView.onStop();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (locationEngine!=null)
{
locationEngine.deactivate();
} mapView.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}
Voici le XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context="com.example.joltatech.selfmadmap.Main2Activity">
<com.mapbox.mapboxsdk.maps.MapView
Android:id="@+id/mapView"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:mapbox_cameraTargetLat="40.73581"
app:mapbox_cameraTargetLng="-73.99155"
app:mapbox_styleUrl="@string/mapbox_style_satellite_streets"
app:mapbox_cameraZoom="11"/>
</RelativeLayout>
Voici les fichiers Gradle:
implementation 'com.mapbox.mapboxsdk:mapbox-Android-sdk:6.3.0'
implementation 'com.mapbox.mapboxsdk:mapbox-Android-plugin-locationlayer:0.6.0'
et dans le niveau du projet, utilisez:
jcenter()
mavenCentral()
mapboxMap.getLocationComponent (). getLastKnownLocation (). getLatitude ()