added empty implementations for the geofence classes
new file: 2015/android/Geofence/app/src/main/java/com/esrlabs/geofence/CircleGeofence.java new file: 2015/android/Geofence/app/src/main/java/com/esrlabs/geofence/Geofence.java modified: 2015/android/Geofence/app/src/main/java/com/esrlabs/geofence/GeofenceApp.java new file: 2015/android/Geofence/app/src/main/java/com/esrlabs/geofence/PolygonGeofence.java renamed: 2015/android/Geofence/app/src/test/java/com/esrlabs/geofence/Utils.java -> 2015/android/Geofence/app/src/main/java/com/esrlabs/geofence/Utils.java
This commit is contained in:
parent
4c9a0b9be6
commit
db654fdb0b
5 changed files with 112 additions and 0 deletions
|
@ -0,0 +1,19 @@
|
||||||
|
package com.esrlabs.geofence;
|
||||||
|
|
||||||
|
import android.location.Location;
|
||||||
|
|
||||||
|
public class CircleGeofence implements Geofence {
|
||||||
|
|
||||||
|
final Location center;
|
||||||
|
final float radiusInMeters;
|
||||||
|
|
||||||
|
public CircleGeofence(Location center, float radiusInMeters) {
|
||||||
|
this.center = center;
|
||||||
|
this.radiusInMeters = radiusInMeters;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsLocation(Location location) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.esrlabs.geofence;
|
||||||
|
|
||||||
|
import android.location.Location;
|
||||||
|
|
||||||
|
public interface Geofence {
|
||||||
|
|
||||||
|
public boolean containsLocation(Location location);
|
||||||
|
}
|
|
@ -17,6 +17,9 @@ import com.esrlabs.headunitinterface.HeadUnit;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static android.location.LocationManager.NETWORK_PROVIDER;
|
||||||
|
import static com.esrlabs.geofence.Utils.location;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Steps:
|
* Steps:
|
||||||
* - register to the location provider
|
* - register to the location provider
|
||||||
|
@ -33,5 +36,53 @@ public class GeofenceApp extends Service implements LocationListener {
|
||||||
public static final String TAG = "GeofenceApp";
|
public static final String TAG = "GeofenceApp";
|
||||||
public static final String CAN_PROVIDER = "CanLocationProvider";
|
public static final String CAN_PROVIDER = "CanLocationProvider";
|
||||||
|
|
||||||
|
private LocationManager locationManager;
|
||||||
|
private Geofence geofence;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
super.onCreate();
|
||||||
|
|
||||||
|
Log.d(TAG, "onCreate");
|
||||||
|
|
||||||
|
if (locationManager == null) {
|
||||||
|
locationManager = (LocationManager)
|
||||||
|
this.getSystemService(Context.LOCATION_SERVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
initLocationListener();
|
||||||
|
initHeadUnitService();
|
||||||
|
|
||||||
|
if (geofence == null) {
|
||||||
|
final int someRadiusInMeters = 25;
|
||||||
|
final Location someCenterForTheGeofence = location(NETWORK_PROVIDER, 48.118920, 11.601057);
|
||||||
|
geofence = new CircleGeofence(someCenterForTheGeofence, someRadiusInMeters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IBinder onBind(Intent intent) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderEnabled(String provider) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderDisabled(String provider) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.esrlabs.geofence;
|
||||||
|
|
||||||
|
import android.location.Location;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PolygonGeofence implements Geofence {
|
||||||
|
|
||||||
|
final List<Location> polygonPoints;
|
||||||
|
|
||||||
|
public PolygonGeofence(Location... locations) {
|
||||||
|
polygonPoints = new ArrayList<Location>(Arrays.asList(locations));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It implements the Ray casting algorithm, with the convention that the line is horizontal and
|
||||||
|
* goes from left to right.
|
||||||
|
* @param location The point to be checked if is inside the defined polygon shaped geofence
|
||||||
|
* @return True if the location is inside the defined polygon.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean containsLocation(Location location) {
|
||||||
|
int numberOfCorners = polygonPoints.size();
|
||||||
|
|
||||||
|
//adding the first corner at the end so that we can count the edge between last and first corners too
|
||||||
|
List<Location> corners = new ArrayList<Location>(polygonPoints);
|
||||||
|
corners.add(polygonPoints.get(0));
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue