segue ai os codigos, 3 classes faz o trabalho, a primeira eu coloquei os endereços dos dispositivos fixo, ai é só vc alterar os endereços para o seu dispositivo.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Bluetooth;
import java.io.DataInputStream;
import java.io.IOException;
//import javax.bluetooth.ServiceRecord;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
/**
*
* @author Shakall
*/
public class SPPClient extends Thread {
//private ServiceRecord serviceRecord;
private int read;
private StringBuffer buffer;
private String url;
StreamConnection streamConnection;
DataInputStream dataInputStream;
boolean automatico = true;
private static final String GPS1 = "btspp://001C88204B92:1;authenticate=false;encrypt=false;master=false";
private static final String GPS2 = "btspp://001C882052A9:1;authenticate=false;encrypt=false;master=false";
private static final String GPS3 = "btspp://001C88205241:1;authenticate=false;encrypt=false;master=false";
private static final String GPSLOGGER="btspp://001BC105B008:1;authenticate=false;encrypt=false;master=false";;
public SPPClient() {
super();
// this.serviceRecord = serviceRecord;
// if (serviceRecord == null) {
url = GPS1;
// } else {
// url = serviceRecord.getConnectionURL(serviceRecord.NOAUTHENTICATE_NOENCRYPT, false);
// }
// NMEA0183.setURL(url);
}
public void run() {
try {
while (automatico) {
pegarPosicao();
sleep(300000);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public int pegarPosicao() {
try {
streamConnection = (StreamConnection) Connector.open(url);
dataInputStream = streamConnection.openDataInputStream();
NMEA0183.limpa();
while (NMEA0183.size() < 4) {
buffer = new StringBuffer();
while ((read = dataInputStream.read()) != 13) {
buffer.append((char) read);
}
buffer.append((char) 13).append((char) dataInputStream.read());
NMEA0183.setNMEA0183(buffer.toString());
}
dataInputStream.close();
streamConnection.close();
return 1;
} catch (IOException ex) {
ex.printStackTrace();
return 0;
}
}
}
package Bluetooth;
import java.util.NoSuchElementException;
public class StringTokenizer {
private char delimiter;
private int currentPosition;
private int nextPosition;
private int maxPosition;
private String string;
public StringTokenizer(String string, char delimiter) {
this.string = string;
this.currentPosition = 0;
this.delimiter = delimiter;
this.maxPosition = string.length();
this.nextPosition = string.indexOf(delimiter, currentPosition);
if(nextPosition == -1 && currentPosition < maxPosition){
nextPosition = maxPosition;
}
}
public boolean hasNext() {
return nextPosition != -1 && currentPosition <= nextPosition;
}
public String next() throws NoSuchElementException {
if (!hasNext())
throw new NoSuchElementException();
String next = string.substring(currentPosition, nextPosition);
currentPosition = nextPosition + 1;
nextPosition = string.indexOf(delimiter, currentPosition);
if(nextPosition == -1 && currentPosition < maxPosition){
nextPosition = maxPosition;
}
return next;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Bluetooth;
import java.util.Calendar;
import java.util.Date;
import net.dclausen.microfloat.MicroFloat;
/**
*
* @author Shakall
*/
public final class NMEA0183 {
public static final int GPGGA = 0x01;
public static final int GPGSA = 0x02;
public static final int GPGSV = 0x04;
public static final int GPRMC = 0x00;
private static String lastGPGGA = "";
private static String lastGPGSA = "";
private static String lastGPGSV = "";
//private static String lastGPRMC = "";
private static String lastGPRMC = "";// = "$GPRMC,224648.000,A,2655.7695,S,856.8809,W,0.37,18.51,300309,,,A*51";
private static String URL;
public static String getData() {
String data = null;
String hora;
if (lastGPRMC.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPRMC, ',');
try {
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
data = stringTokenizer.next();
hora = getHorario();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(data.substring(0, 2)));
cal.set(Calendar.MONTH, Integer.parseInt(data.substring(2, 4)) - 1);
cal.set(Calendar.YEAR, (2000 + Integer.parseInt(data.substring(4, 6))));
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hora.substring(0, 2)));
cal.set(Calendar.MINUTE, Integer.parseInt(hora.substring(3, 5)));
cal.set(Calendar.SECOND, Integer.parseInt(hora.substring(6, 8)));
data = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND);
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
//return data;excluir
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
data = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" + cal.get(Calendar.DAY_OF_MONTH) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND);
}
return data;
}
static void limpa() {
lastGPGGA = "";
lastGPGSA = "";
lastGPGSV = "";
lastGPRMC = "";
}
public static synchronized void setURL(String URL) {
NMEA0183.URL = URL;
}
public static synchronized String getURL() {
return URL;
}
public static synchronized int size() {
int cont = 0;
if (!lastGPGGA.equals("")) {
cont++;
}
if (!lastGPGSA.equals("")) {
cont++;
}
if (!lastGPGSV.equals("")) {
cont++;
}
if (!lastGPRMC.equals("")) {
cont++;
}
return cont;
}
private static String corrigeHora(int hora) {
if (hora >= 3) {
hora = hora - 3;
if (hora < 10) {
return "0" + hora;
} else {
return hora + "";
}
} else {
hora = (hora - 3) + 24;
if (hora < 10) {
return "0" + hora;
} else {
return hora + "";
}
}
}
private NMEA0183() {
}
public static synchronized String getNMEA0183(int type) {
switch (type) {
case GPRMC:
return lastGPRMC;
case GPGGA:
return lastGPGGA;
case GPGSA:
return lastGPGSA;
case GPGSV:
return lastGPGSV;
default:
return "";
}
}
public static synchronized void setNMEA0183(String nmea0183) {
if (nmea0183.startsWith("$GPRMC")) {
lastGPRMC = nmea0183;
} else if (nmea0183.startsWith("$GPGGA")) {
lastGPGGA = nmea0183;
} else if (nmea0183.startsWith("$GPGSA")) {
lastGPGSA = nmea0183;
} else if (nmea0183.startsWith("$GPGSV")) {
lastGPGSV = nmea0183;
}
}
public static synchronized String getHorario() {
if (lastGPRMC.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPRMC, ',');
try {
stringTokenizer.next();
String tempo = stringTokenizer.next();
if (tempo.length() >= 7) {
return corrigeHora(Integer.parseInt(tempo.substring(0, 2))) + ":" + tempo.substring(2, 4) + ":" + tempo.substring(4, 6);
} else {
return "";
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
public static synchronized String getLat() {
if (lastGPRMC.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPRMC, ',');
try {
stringTokenizer.next();
stringTokenizer.next();
if (stringTokenizer.next().equals("A")) {
return stringTokenizer.next() + " " + stringTokenizer.next();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return "";
}
public static synchronized String getLatDirection() {
if (lastGPRMC.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPRMC, ',');
try {
stringTokenizer.next();
stringTokenizer.next();
if (stringTokenizer.next().equals("A")) {
stringTokenizer.next();
return stringTokenizer.next();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
public static synchronized String getLog() {
if (lastGPRMC.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPRMC, ',');
try {
stringTokenizer.next();
stringTokenizer.next();
if (stringTokenizer.next().equals("A")) {
stringTokenizer.next();
stringTokenizer.next();
return stringTokenizer.next() + " " + stringTokenizer.next();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return "";
}
public static synchronized String getLogDirection() {
if (lastGPRMC.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPRMC, ',');
try {
stringTokenizer.next();
stringTokenizer.next();
if (stringTokenizer.next().equals("A")) {
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
return stringTokenizer.next();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
public static synchronized String getVel() {
if (lastGPRMC.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPRMC, ',');
try {
stringTokenizer.next();
stringTokenizer.next();
if (stringTokenizer.next().equals("A")) {
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
String knots = stringTokenizer.next();
String kph = MicroFloat.toString(MicroFloat.mul(MicroFloat.parseFloat(knots), MicroFloat.parseFloat("1.852"))) + "";
if (kph.length() > 3) {
kph = kph.substring(0, kph.indexOf('.') + 3);
}
return kph;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return "";
}
public static synchronized String getDirection() {
if (lastGPRMC.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPRMC, ',');
try {
stringTokenizer.next();
stringTokenizer.next();
if (stringTokenizer.next().equals("A")) {
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
return stringTokenizer.next();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return "";
}
public static synchronized String getAlt() {
if (lastGPGGA.length() > 1) {
StringTokenizer stringTokenizer = new StringTokenizer(lastGPGGA, ',');
try {
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
stringTokenizer.next();
return stringTokenizer.next();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return "";
}
}