LocationFinder.java
/*
* Copyright © 2012 Nokia Corporation. All rights reserved.
* Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation.
* Oracle and Java are trademarks or registered trademarks of Oracle and/or its
* affiliates. Other product and company names mentioned herein may be trademarks
* or trade names of their respective owners.
* See LICENSE.TXT for license information.
*/
package com.nokia.example.weatherapp.location;
/**
* Abstarct class hiding location API dependencies to enable running the
* application also on device, that don't support locationing
*/
public abstract class LocationFinder {
/**
* Returns a LocationFinder instance, which uses the quickest mehtod the
* device has to offer
*/
public static LocationFinder getLocationFinder() {
LocationFinder provider = null;
try {
if (supportsLocationAppendix()) {
Class c = Class.forName("com.nokia.example.weatherapp.location.CellIdLocationFinderImpl");
provider = (LocationFinder) (c.newInstance());
}
else if (supportsLocation()) {
Class c = Class.forName("com.nokia.example.weatherapp.location.GpsLocationFinderImpl");
provider = (LocationFinder) (c.newInstance());
}
}
catch (Exception e) {
// Return null if location APIs are not supported
}
return provider;
}
/**
* Sets listener for location updates
*/
public abstract void setLocationListener(LocationListener listener);
/**
* Starts non-recurring location retrieval
*/
public abstract void start(int timeout);
/**
* Cancels location retrieval
*/
public abstract void cancel();
/**
* Determines whether the Location API (JSR-179) is available on the device
*/
public static boolean supportsLocation() {
try {
Class.forName("javax.microedition.location.Location");
return true;
}
catch (Exception e) {
return false;
}
}
/**
* Determines whether the Location API Appendix is available on the device
*/
public static boolean supportsLocationAppendix() {
try {
Class.forName("com.nokia.mid.location.LocationUtil");
return true;
}
catch (Exception e) {
return false;
}
}
}