[Resolvido]descobrindo MAC e Nome pelo bluetooth

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

Shakall

funciono certinho aqui

abraço

valeu pela ajuda!! :stuck_out_tongue: