Retrieving the location of a BlackBerry device
You can retrieve the location of a BlackBerry device by specifying a single GPS fix, or by specifying a location listener to retrieve continuous GPS fixes.
Code sample: Retrieving the GPS location of a BlackBerry device
import javax.microedition.location.*;
public class handleGPS
{
static GPSThread gpsThread;
static double latitude;
static double longitude;
public handleGPS()
{
gpsThread = new GPSThread();
gpsThread.start();
}
private static class GPSThread extends Thread
{
public void run()
{
Criteria myCriteria = new Criteria();
myCriteria.setCostAllowed(false);
try
{
LocationProvider myLocationProvider =
LocationProvider.getInstance(myCriteria);
try
{
Location myLocation = myLocationProvider.getLocation(300);
latitude = myLocation.getQualifiedCoordinates().getLatitude();
longitude = myLocation.getQualifiedCoordinates().getLongitude();
}
catch ( InterruptedException iex )
{
return;
}
catch ( LocationException lex )
{
return;
}
}
catch ( LocationException lex )
{
return;
}
return;
}
}
}
Code sample: Retrieving the GPS location of a BlackBerry device by using continuous fix requests
import javax.microedition.location.*;
public class handleGPS
{
public handleGPS()
{
Criteria myCriteria = new Criteria();
try
{
LocationProvider provider = LocationProvider.getInstance(myCriteria);
provider.setLocationListener(new handleGPSListener(), 10, -1, -1);
}
catch ( LocationException lex )
{
return;
}
}
public static class handleGPSListener implements LocationListener
{
public void locationUpdated(LocationProvider provider, Location location)
{
if (location.isValid())
{
// do something
}
else
{
// invalid location
}
}
public void providerStateChanged(LocationProvider provider, int newState)
{
if (newState == LocationProvider.OUT_OF_SERVICE)
{
// GPS unavailable due to IT policy specification
}
else if (newState == LocationProvider.TEMPORARILY_UNAVAILABLE )
{
// no GPS fix
}
}
}
}
Retrieving location information by using the Location class
Retrieve location information by using the Location class
Code sample: Using the Location class to retrieve GPS location information
import javax.microedition.location.*;
public class handleGPS
{
static GPSThread gpsThread;
static double latitude;
static double longitude;
static float heading;
static float velocity;
static long timeStamp;
static String nmeaString;
public handleGPS()
{
gpsThread = new GPSThread();
gpsThread.start();
}
private static class GPSThread extends Thread
{
public void run()
{
Criteria myCriteria = new Criteria();
myCriteria.setCostAllowed(false);
try
{
LocationProvider myLocationProvider =
LocationProvider.getInstance(myCriteria);
try
{
Location myLocation = myLocationProvider.getLocation(300);
latitude = myLocation.getQualifiedCoordinates().getLatitude();
longitude = myLocation.getQualifiedCoordinates().getLongitude();
velocity = myLocation.getSpeed();
heading = myLocation.getCourse();
timeStamp = myLocation.getTimestamp();
nmeaString = myLocation.getExtraInfo
("application/X-jsr179-location-nmea");
}
catch ( InterruptedException iex )
{
return;
}
catch ( LocationException lex )
{
return;
}
}
catch ( LocationException lex )
{
return;
}
return;
}
}
}
Retrieving location information by using the BlackBerryLocation class
Retrieve satellite information by using the BlackBerryLocation class
Code sample: Using the BlackBerryLocation class to retrieve satellite information
import net.rim.device.api.gps.*;
import java.util.*;
import javax.microedition.location.*;
public class handleGPS
{
static GPSThread gpsThread;
static int satCount;
static int signalQuality;
static int dataSource;
static int gpsMode;
public handleGPS()
{
gpsThread = new GPSThread();
gpsThread.start();
}
private static class GPSThread extends Thread
{
public void run()
{
try
{
BlackBerryCriteria myCriteria =
new BlackBerryCriteria(GPSInfo.GPS_MODE_AUTONOMOUS);
try
{
BlackBerryLocationProvider myProvider =
(BlackBerryLocationProvider)
LocationProvider.getInstance(myCriteria);
try
{
BlackBerryLocation myLocation =
(BlackBerryLocation)myProvider.getLocation(300);
satCount= myLocation.getSatelliteCount();
signalQuality =
myLocation.getAverageSatelliteSignalQuality();
dataSource = myLocation.getDataSource();
gpsMode = myLocation.getGPSMode();
SatelliteInfo si;
StringBuffer sb = new StringBuffer("[Id:SQ:E:A]\n");
String separator = ":";
for (Enumeration e = myLocation.getSatelliteInfo();
e!=null && e.hasMoreElements(); )
{
si = (SatelliteInfo)e.nextElement();
sb.append(si.getId() + separator);
sb.append(si.getSignalQuality() + separator);
sb.append(si.getElevation() + separator);
sb.append(si.getAzimuth());
sb.append('\n');
}
}
catch ( InterruptedException iex )
{
return;
}
catch ( LocationException lex )
{
return;
}
}
catch ( LocationException lex )
{
return;
}
}
catch ( UnsupportedOperationException uoex )
{
return;
}
return;
}
}
}
Change the criteria to receive location information
Code sample: Changing the criteria to retrieve location information
import net.rim.device.api.gps.GPSInfo;
import javax.microedition.location.*;
public class handleGPS
{
static LocationProvider locationProvider;
static double lat, lon;
static float alt, spd, crs;
public static void main(String[] args)
{
}
public handleGPS(int gpsMode)
{
if (locationProvider != null)
{
locationProvider.reset();
locationProvider.setLocationListener(null, -1, -1, -1);
}
Criteria myCriteria = new Criteria();
myCriteria.setPreferredResponseTime(Criteria.NO_REQUIREMENT);
myCriteria.setCostAllowed(true);
if ( gpsMode == GPSInfo.GPS_MODE_AUTONOMOUS )
{
myCriteria.setCostAllowed(false);
}
else if ( gpsMode == GPSInfo.GPS_MODE_ASSIST )
{
myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_MEDIUM);
}
else
{
myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW);
}
try
{
locationProvider = LocationProvider.getInstance(myCriteria);
if (locationProvider != null)
{
locationProvider.setLocationListener
(new myLocationListener(), -1, -1, -1);
}
}
catch (Exception err)
{
}
}
private static class myLocationListener implements LocationListener
{
public void locationUpdated(LocationProvider provider, Location location)
{
lat = location.getQualifiedCoordinates().getLatitude();
lon = location.getQualifiedCoordinates().getLongitude();
alt = location.getQualifiedCoordinates().getAltitude();
spd = location.getSpeed();
crs = location.getCourse();
}
public void providerStateChanged(LocationProvider provider, int newState)
{
}
}
}
Next topic:
Error handling