ola galera
voces saberiam me informar o DiscoveryListener funciona para descobrir dispositivos bluetooth entre os celulares
já vi ele rondando e descobrindo esses dados em um pc, porem entre celulares não to conseguindo fazer isso
alguem tem algum exemplo?
obrigado
Não há distinção e ele vai encontrar qualquer coisa que implementa a stack Bluetooth.
Se vc estudou o assunto, verá que é possível determinar a qual classe de dispositivo o mesmo pertence: impressora, desktop, camera,etc…
Dá sim cara e é o mesmo codigo do PC, pode tentar que vai!
[code]
import java.io.IOException;
import java.util.Vector;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.microedition.lcdui.List;
public class BluetoothDeviceDiscovery implements DiscoveryListener {
private static Object lock = new Object();
private static Vector vecDispositivos = new Vector();
Vector MAC = new Vector();
Vector Nome = new Vector();
int deviceCount =0;
public void buscaDispositivos() throws IOException {
try {
BluetoothDeviceDiscovery bluetoothDeviceDiscovery = new BluetoothDeviceDiscovery();
LocalDevice localDevice = LocalDevice.getLocalDevice();
// System.out.println("MAC: " + localDevice.getBluetoothAddress());
// System.out.println("NOME : " + localDevice.getFriendlyName());
DiscoveryAgent agent = localDevice.getDiscoveryAgent();
System.out.println(“Iniciando a busca…”);
agent.startInquiry(DiscoveryAgent.GIAC, bluetoothDeviceDiscovery);
try {
synchronized (lock) {
lock.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(“Busca Finalizada”);
deviceCount = 0;
deviceCount = vecDispositivos.size();
if (deviceCount <= 0) {
System.out.println(“No Devices Found .”);
} else {
//print bluetooth device addresses and names in the format [ No. address (name) ]
System.out.println("Bluetooth Devices: ");
for (int i = 0; i < deviceCount; i++) {
RemoteDevice remoteDevice = (RemoteDevice) vecDispositivos.elementAt(i);
System.out.println((i + 1) + “. " + remoteDevice.getBluetoothAddress() + " (” + remoteDevice.getFriendlyName(true) + “)”);
try {
MAC.addElement(remoteDevice.getBluetoothAddress());
Nome.addElement(remoteDevice.getFriendlyName(true));
System.out.println((i + 1) + ". " + remoteDevice.getBluetoothAddress() + " (" + remoteDevice.getFriendlyName(true) + ")");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
} catch (BluetoothStateException ex) {
ex.printStackTrace();
}
}
public Vector getMAC(){
return MAC;
}
public Vector getNome(){
return Nome;
}
public int getNumeroDispositivosDetectados(){
return deviceCount;
}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
System.out.println("Dispositivos Descobertos: " + btDevice.getBluetoothAddress());
//add the device to the vector
if (!vecDispositivos.contains(btDevice)) {
vecDispositivos.addElement(btDevice);
}
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
}
public void serviceSearchCompleted(int transID, int respCode) {
}
public void inquiryCompleted(int discType) {
synchronized (lock) {
lock.notify();
}
switch (discType) {
case DiscoveryListener.INQUIRY_COMPLETED:
System.out.println("INQUIRY_COMPLETED");
break;
case DiscoveryListener.INQUIRY_TERMINATED:
System.out.println("INQUIRY_TERMINATED");
break;
case DiscoveryListener.INQUIRY_ERROR:
System.out.println("INQUIRY_ERROR");
break;
default:
System.out.println("Unknown Response Code");
break;
}
}
}[/code]
este é o codigo que to usando, porem somente localiza o MEC e NOME do dispositivo LOCAL
E o que mais tu quer? Com o Mac e o Nome tu faz tudo o que é necessario.
eu quero o MAC e NOME dos dispositivos que estão AO REDOR, nao o MAC e NOME do dispositivo local
Shakall eu usei o mesmo codigo, com excessao do metodo main que eu troquei por um metodo normal
porem dai so localiza o local, com o metodo main e em um projeto que tenha o bluecouve localiza todos os dispositivos certinho
Entendi, bom aqui eu uso o codigo abaixo consigo achar qualquer dipositivo bluetooth e ele monta uma lista exibindo eles, foi um sisteam teste para pegar posições de um gps. testa ae.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Bluetooth;
import Tela.BluetoothGPS;
import java.io.IOException;
import java.util.Vector;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.lcdui.AlertType;
/**
*
* @author Shakall
*/
public class Buscar extends Thread implements DiscoveryListener {
private LocalDevice localdevice;
private DiscoveryAgent agent;
private BluetoothGPS pai;
private Vector devices;
private Vector servicos;
private Vector devicesClasses;
private RemoteDevice[] remoteDevices;
public boolean inquiryOn = false, serviceSearchOn = false;
private ServiceRecord record;
private int transactionID;
private UUID[] uuidset = new UUID[]{new UUID(0x1101)};
private Vector servNames;
public Buscar(BluetoothGPS pai) {
servicos = new Vector();
devicesClasses = new Vector();
this.pai = pai;
try {
localdevice = LocalDevice.getLocalDevice();
agent = localdevice.getDiscoveryAgent();
devices = new Vector();
} catch (BluetoothStateException ex) {
ex.printStackTrace();
}
}
public DiscoveryAgent getAgent() {
return agent;
}
public void run() {
localizarDevices();
}
public void localizarDevices() {
remoteDevices = retrieveDevices();//verifica dispositivos já encontrados
if (remoteDevices != null && remoteDevices.length > 0) {//caso nao ache nenhum começa a buscar
pai.getLDispositivos().deleteAll();
try {
for (int i = 0; i < remoteDevices.length; i++) {
pai.getLDispositivos().append(remoteDevices[i].getFriendlyName(false), null);
}
pai.switchDisplayable(null, pai.getLDispositivos());
} catch (IOException ex) {
pai.getAlert().setString("Erro ao obter o nome do dispositivo!");
pai.getAlert().setType(AlertType.ERROR);
pai.switchDisplayable(pai.getAlert(), pai.getLDispositivos());
}
} else {//busca por dispositivos
try {
inquiryOn = true;
devices.removeAllElements();
agent.startInquiry(DiscoveryAgent.GIAC, this);
pai.switchDisplayable(null, pai.getFAguarde());
} catch (BluetoothStateException ex) {
pai.getAlert().setString("Erro ao iniciar inquiry!");
pai.getAlert().setType(AlertType.ERROR);
pai.switchDisplayable(pai.getAlert(), pai.getLDispositivos());
}
}
}
private RemoteDevice[] retrieveDevices() {
RemoteDevice[] rd = null;
rd = agent.retrieveDevices(DiscoveryAgent.CACHED);
if (rd == null) {
rd = agent.retrieveDevices(DiscoveryAgent.PREKNOWN);
}
return rd;
}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
if (!devices.contains(btDevice)) {
devices.addElement(btDevice);
devicesClasses.addElement(cod);
}
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
servNames = new Vector();
for (int i = 0; i < servRecord.length; i++) {
//DataElement serviceNameElement = servRecord[i].getAttributeValue(0x0100);
//String _serviceName = (String) serviceNameElement.getValue();
//String serviceName = _serviceName.trim();
//servNames.addElement(serviceName);
//servNames.addElement(servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false));
servicos.addElement(servRecord[i]);
}
}
public void serviceSearchCompleted(int transID, int respCode) {
serviceSearchOn = false;
if (servicos.size() > 0) {
SPPClient client = new SPPClient((ServiceRecord) servicos.elementAt(0), pai);
//pai.getAlert().setString("GPS Conectado!\n" + servNames.toString());
pai.getAlert().setString("GPS Conectado!");
pai.switchDisplayable(pai.getAlert(), pai.getLPrincipal());
pai.setCliente(client);
client.start();
} else {
pai.switchDisplayable(null, pai.getLPrincipal());
}
}
public void inquiryCompleted(int discType) {
inquiryOn = false;
switch (discType) {
case INQUIRY_COMPLETED://concluido normalmente
{
pai.getLDispositivos().deleteAll();
if (devices.size() > 0) {
remoteDevices = new RemoteDevice[devices.size()];
devices.copyInto(remoteDevices);
int error = 0;
for (int i = 0; i < remoteDevices.length; i++) {
try {
pai.getLDispositivos().append(remoteDevices[i].getFriendlyName(false), null);
} catch (IOException ex) {
if (error < 4) {
i--;
error++;
} else {
pai.getAlert().setString("Erro ao obter o nome do dispositivo!");
pai.getAlert().setType(AlertType.ERROR);
pai.switchDisplayable(pai.getAlert(), pai.getLDispositivos());
return;
}
}
}
pai.switchDisplayable(null, pai.getLDispositivos());
pai.setDevicesFound(remoteDevices);
} else {
pai.getAlert().setString("Nenhum dispositivo encontrado!");
pai.getAlert().setType(AlertType.INFO);
pai.switchDisplayable(pai.getAlert(), pai.getLDispositivos());
}
break;
}
case INQUIRY_TERMINATED://cancelado manualmente
{
pai.getAlert().setString("Busca por dispositivos cancelada!");
pai.getAlert().setType(AlertType.INFO);
pai.switchDisplayable(pai.getAlert(), pai.getLDispositivos());
break;
}
case INQUIRY_ERROR://erro
{
pai.getAlert().setString("Houve um erro na busca por dispositivos!");
pai.getAlert().setType(AlertType.ERROR);
pai.switchDisplayable(pai.getAlert(), pai.getLDispositivos());
break;
}
}
pai.setDevicesFound(remoteDevices);
}
public void cancelarBusca() {
if (inquiryOn) {
agent.cancelInquiry(this);
inquiryOn = false;
}
if (serviceSearchOn) {
agent.cancelServiceSearch(transactionID);
serviceSearchOn = false;
}
}
public void searchService(RemoteDevice record) {
try {
pai.switchDisplayable(null, pai.getFAguarde());
servicos.removeAllElements();
serviceSearchOn = true;
pai.switchDisplayable(null, pai.getFAguarde());
agent.searchServices(null, uuidset, record, this);
} catch (IOException ex) {
pai.getAlert().setString(ex.getMessage());
pai.switchDisplayable(pai.getAlert(), pai.getLPrincipal());
}
}
}
obrigado Shakall, to estudando sua classe
consegui pegar os Notebooks com bluetooth que to trabalhando, agora vou atras de celulares, tentarei fazer testes na faculdade
abraço