|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2004
Città: castel san giorgio(salerno)
Messaggi: 1218
|
Bluetooth in Java: problema discovery.
Ciao ragazzi, tutto bene? Io ho un piccolo problema col Bluetooth in Java. Mi sto avvicinando avvicinando alle librerie javax.bluetooth da poco e ho un problema semplice: devo fare il discovery dei dispositivi bluetooth ma mi rileva sempre lo stesso dispositivo, anche se si trova spento.
Vi posto la classe con il main: Codice:
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
public class MyTest {
public static void main(String[] args) {
DiscoveryAgent agent;
int i=0;
while(i!=1){
try {
MyDiscoveryListener myDiscovery = new MyDiscoveryListener();
agent = LocalDevice.getLocalDevice().getDiscoveryAgent();
boolean complete = agent.startInquiry(DiscoveryAgent.PREKNOWN, myDiscovery);
System.out.println("Stato inquiry: "+ complete);
i++;
}
catch (Exception e) {}
}
}
}
Codice:
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
public class MyDiscoveryListener implements DiscoveryListener {
public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass arg1) {
System.out.println("remote device discovered:"+remoteDevice.getBluetoothAddress());
}
public void inquiryCompleted(int arg0) {
System.out.println("Inquiry completed");
}
public void serviceSearchCompleted(int arg0, int arg1) {
// TODO Auto-generated method stub
}
public void servicesDiscovered(int arg0, ServiceRecord[] arg1) {
// TODO Auto-generated method stub
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2004
Città: castel san giorgio(salerno)
Messaggi: 1218
|
Posto il codice dela classe myTest un po in maniera piu pulita.
Codice:
package de.avetana.bluetooth;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
public class MyTest {
public static void main(String[] args) {
try{
LocalDevice localdevice = LocalDevice.getLocalDevice();
DiscoveryAgent discoveryagent = localdevice.getDiscoveryAgent();
MyDiscoveryListener myDisc = new MyDiscoveryListener();
discoveryagent.startInquiry(DiscoveryAgent.GIAC,myDisc);
}
catch(Exception e){
e.printStackTrace();
}
}
}
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2004
Città: castel san giorgio(salerno)
Messaggi: 1218
|
Ragazzi ho trovato un codice Java che implementa proprio quello che serve a me, ma con funzioni aggiuntive. Si chiama "Avetana Bluetooth"
Ho preso solo la parte che serve per fare il discovery e ho fatto il mio codice che ora vi posto: Codice:
e package de.avetana.bluetooth;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.UUID;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import de.avetana.bluetooth.util.IntDeviceFinder;
import de.avetana.bluetooth.util.ServiceFinderPane;
public class JSRTest extends JFrame implements ActionListener {
private ServiceFinderPane m_servicePanel;
private JPanel m_rightPanel;
private JSplitPane m_split;
private DiscoveryAgent m_agent;
private LocalDevice m_local;
public static void main(String[] args) throws Exception {
JSRTest JSRTest1 = new JSRTest();
}
public JSRTest() throws Exception {
super ("Avetana Bluetooth Utility");
try {
m_local=LocalDevice.getLocalDevice();
m_agent=m_local.getDiscoveryAgent();
jbInit();
pack();
setLocationRelativeTo(null);
setVisible (true);
}
catch(Exception ex) {JOptionPane.showMessageDialog(null, "An error occured while loading the application!", "Error",JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();
System.exit(0);
}
}
private void jbInit() throws Exception {
Container con = this.getContentPane();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel sdp=new JPanel();
sdp.setLayout(new BorderLayout());
//Parte dove stanno i risultati del discovery
m_servicePanel=new ServiceFinderPane(this,"lastBTSearchRFComm", new UUID[]{new UUID("3", true)});
m_split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, m_servicePanel,m_rightPanel);
sdp.add(m_split, BorderLayout.CENTER);
con.add(sdp, BorderLayout.CENTER);
this.m_servicePanel.m_select.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
}
}
1 - nel PAnel mi rileva solo i dispositivi realmente accesi me nella console escono sempre tutti quelli che ha trovato in precedenza 2 - se nelle vicinanze c'è un nuovo dispositivo che non ha mai trovato, anche se è acceso non lo trova. Solo dopo aver fatto il discovery con il software della chiavetta bluetooth che ho sul pc me lo trova e comincia a funzionare bene rilevando il nuovo dispotivo quando è On, e non rilevandolo quando è OFF. Qualcuno sa spiegarmi come mai? Grazie. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:12.



















