i want to display the location on the map, i new map with:
ArcGISTiledLayer usaLayer = new ArcGISTiledLayer(getResources().getString(R.string.map_layer));
map = new ArcGISMap(SpatialReference.create(getResources().getString(R.string.wkid)));
and show location but location deviate about 300m from the current location; my code
map = new ArcGISMap(SpatialReference.create(getResources().getString(R.string.wkString)));
// Viewpoint viewPoint1 = new Viewpoint(new Point(433214.603,1211184.161, map.getSpatialReference()), 1000000);
// map.setInitialViewpoint(viewPoint1);
// map = new ArcGISMap();
map.getBasemap().getBaseLayers().add(usaLayer);
mMapView = (MapView) findViewById(R.id.mapView);
BackgroundGrid backgroundGrid = new BackgroundGrid(Color.WHITE,Color.WHITE,0,2);
mMapView.setBackgroundGrid(backgroundGrid);
mMapView.setMap(map);
Viewpoint viewPoint = new Viewpoint(new Point(433214.603,1211184.161, map.getSpatialReference()), 1000000);
mMapView.setViewpoint(viewPoint);
// map.setInitialViewpoint(view);
mMapView.setAttributionTextVisible(false);
mLocationDisplay = mMapView.getLocationDisplay();
mLocationDisplay.addDataSourceStatusChangedListener(new LocationDisplay.DataSourceStatusChangedListener() {
@Override
public void onStatusChanged(LocationDisplay.DataSourceStatusChangedEvent dataSourceStatusChangedEvent) {
// If LocationDisplay started OK, then continue.
if (dataSourceStatusChangedEvent.isStarted())
return;
// No error is reported, then continue.
if (dataSourceStatusChangedEvent.getError() == null)
return;
// If an error is found, handle the failure to start.
// Check permissions to see if failure may be due to lack of permissions.
boolean permissionCheck1 = ContextCompat.checkSelfPermission(MainActivity.this, reqPermissions[0]) ==
PackageManager.PERMISSION_GRANTED;
boolean permissionCheck2 = ContextCompat.checkSelfPermission(MainActivity.this, reqPermissions[1]) ==
PackageManager.PERMISSION_GRANTED;
if (!(permissionCheck1 && permissionCheck2)) {
// If permissions are not already granted, request permission from the user.
ActivityCompat.requestPermissions(MainActivity.this, reqPermissions, requestCode);
} else {
// Report other unknown failure types to the user - for example, location services may not
// be enabled on the device.
String message = String.format("Error in DataSourceStatusChangedListener: %s", dataSourceStatusChangedEvent
.getSource().getLocationDataSource().getError().getMessage());
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
// Update UI to reflect that the location display did not actually start
mSpinner.setSelection(0, true);
}
}
});
// Populate the list for the Location display options for the spinner's Adapter
ArrayList<ItemData> list = new ArrayList<>();
list.add(new ItemData("", R.mipmap.locationdisplaydisabled));
list.add(new ItemData("", R.mipmap.locationdisplayon));
list.add(new ItemData("", R.mipmap.locationdisplayrecenter));
list.add(new ItemData("", R.mipmap.locationdisplaynavigation));
list.add(new ItemData("", R.mipmap.locationdisplayheading));
SpinnerAdapter adapter = new SpinnerAdapter(this, R.layout.spinner_layout, R.id.txt, list);
mSpinner.setAdapter(adapter);
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
// Stop Location Display
if (mLocationDisplay.isStarted())
mLocationDisplay.stop();
break;
case 1:
// Start Location Display
if (!mLocationDisplay.isStarted())
mLocationDisplay.startAsync();
break;
case 2:
// Re-Center MapView on Location
// AutoPanMode - Default: In this mode, the MapView attempts to keep the location symbol on-screen by
// re-centering the location symbol when the symbol moves outside a "wander extent". The location symbol
// may move freely within the wander extent, but as soon as the symbol exits the wander extent, the MapView
// re-centers the map on the symbol.
mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.RECENTER);
if (!mLocationDisplay.isStarted())
mLocationDisplay.startAsync();
break;
case 3:
// Start Navigation Mode
// This mode is best suited for in-vehicle navigation.
mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.NAVIGATION);
if (!mLocationDisplay.isStarted())
mLocationDisplay.startAsync();
break;
case 4:
// Start Compass Mode
// This mode is better suited for waypoint navigation when the user is walking.
mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.COMPASS_NAVIGATION);
if (!mLocationDisplay.isStarted())
mLocationDisplay.startAsync();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Everything works fine, but the location service is not correct