Add the current position on the map.

This commit is contained in:
Geoffrey POUZET 2018-08-02 14:45:28 +02:00
parent c757e860b6
commit 05f03941da
3 changed files with 113 additions and 0 deletions

View File

@ -3,11 +3,14 @@ package fr.chteufleur.mytrackingdog;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;
@ -18,9 +21,19 @@ import org.osmdroid.config.Configuration;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;
import fr.chteufleur.mytrackingdog.services.IServiceGps;
import fr.chteufleur.mytrackingdog.services.ServiceGps;
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private MyLocationNewOverlay mLocationOverlay;
private IServiceGps serviceGps = null;
Context ctx = null;
MapView map = null;
@ -57,6 +70,10 @@ public class MainActivity extends AppCompatActivity {
checkPermissions();
}
if (serviceGps == null) {
serviceGps = new ServiceGps();
}
//load/initialize the osmdroid configuration, this can be done
ctx = getApplicationContext();
Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
@ -84,10 +101,25 @@ public class MainActivity extends AppCompatActivity {
mapController.setZoom(11.0);
GeoPoint startPoint = new GeoPoint(45.0000, 5.0000);
mapController.setCenter(startPoint);
final DisplayMetrics dm = ctx.getResources().getDisplayMetrics();
this.mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(ctx), map);
map.getOverlays().add(this.mLocationOverlay);
mLocationOverlay.enableMyLocation();
mLocationOverlay.enableFollowLocation();
mLocationOverlay.setOptionsMenuEnabled(true);
}
public void onResume(){
super.onResume();
((ServiceGps) serviceGps).setLocationManager((LocationManager) getSystemService(ctx.LOCATION_SERVICE));
serviceGps.start();
mLocationOverlay.enableFollowLocation();
mLocationOverlay.enableMyLocation();
//this will refresh the osmdroid configuration on resuming.
//if you make changes to the configuration, use
//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
@ -99,6 +131,10 @@ public class MainActivity extends AppCompatActivity {
public void onPause(){
super.onPause();
mLocationOverlay.disableFollowLocation();
mLocationOverlay.disableMyLocation();
//this will refresh the osmdroid configuration on resuming.
//if you make changes to the configuration, use
//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
@ -108,6 +144,13 @@ public class MainActivity extends AppCompatActivity {
}
}
public void onBackPressed() {
super.onBackPressed();
if (serviceGps != null) {
serviceGps.stop();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
@ -130,6 +173,8 @@ public class MainActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {

View File

@ -0,0 +1,8 @@
package fr.chteufleur.mytrackingdog.services;
public interface IServiceGps {
public void start();
public void stop();
}

View File

@ -0,0 +1,60 @@
package fr.chteufleur.mytrackingdog.services;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import fr.chteufleur.mytrackingdog.MainActivity;
public class ServiceGps implements IServiceGps, LocationListener {
private static final String TAG = "ServiceGps";
private LocationManager locationManager;
private Location currentLocation = null;
public void setLocationManager(LocationManager locationManager) {
this.locationManager = locationManager;
}
public Location getCurrentLocation() {
return currentLocation;
}
@Override
public void start() {
try {
this.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
} catch (SecurityException ex) {
Log.e(TAG, "Location permission is not activated.", ex);
}
}
@Override
public void stop() {
this.locationManager.removeUpdates(this);
}
@Override
public void onLocationChanged(Location location) {
currentLocation = location;
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
stop();
}
@Override
public void onProviderEnabled(String s) {
start();
}
@Override
public void onProviderDisabled(String s) {
stop();
}
}