|
|
|
![]() |
|
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: 00:08.