xblitz
02-06-2009, 13:20
Salve a tutti. Sto cercando di sviluppare un'applicazione che ricerchi tutti i dispositivi bluetooth nelle vicinanze, purtroppo però il codice che ho fatto (e che gira perfettamente sull'emulatore) si pianta sul mio cellulare (Nokia N85) e non riesco a capire dov'è il problema.
questa è la classe DeviceListener
public class btsearch implements DiscoveryListener
{
private DiscoveryAgent agent;
private Vector DevList;
private boolean fine;
public btsearch ()
{
//costruttore
fine=false;
DevList=new Vector();
LocalDevice local=null;
try
{
local = LocalDevice.getLocalDevice();
}
catch (BluetoothStateException e)
{
}
agent = local.getDiscoveryAgent();
try
{
agent.startInquiry(DiscoveryAgent.GIAC, this);
}
catch (Exception e)
{
}
}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod)
{
//si aggiunge un elemento al vettore delle periferiche trovate
DevList.addElement(btDevice);
}
public void inquiryCompleted(int discType)
{
fine=true;
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord)
{
}
public void serviceSearchCompleted(int transID, int respCode)
{
}
public Vector Devices()
{
return DevList;
}
public boolean getfine()
{
return fine;
}
}
nel codice della midlet invece
bts=new btsearch();
while(!bts.getfine());
Devices=bts.Devices(); //immagaziono in un vettore i dispositivi trovati
Devices.trimToSize();
Penso che il problema sia nel fatto che la startInquiry non essendo bloccante debba essere gestita in un modo diverso da come ho fatto io, però non ho la più pallida idea di come fare...
Grazie per l'aiuto
questa è la classe DeviceListener
public class btsearch implements DiscoveryListener
{
private DiscoveryAgent agent;
private Vector DevList;
private boolean fine;
public btsearch ()
{
//costruttore
fine=false;
DevList=new Vector();
LocalDevice local=null;
try
{
local = LocalDevice.getLocalDevice();
}
catch (BluetoothStateException e)
{
}
agent = local.getDiscoveryAgent();
try
{
agent.startInquiry(DiscoveryAgent.GIAC, this);
}
catch (Exception e)
{
}
}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod)
{
//si aggiunge un elemento al vettore delle periferiche trovate
DevList.addElement(btDevice);
}
public void inquiryCompleted(int discType)
{
fine=true;
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord)
{
}
public void serviceSearchCompleted(int transID, int respCode)
{
}
public Vector Devices()
{
return DevList;
}
public boolean getfine()
{
return fine;
}
}
nel codice della midlet invece
bts=new btsearch();
while(!bts.getfine());
Devices=bts.Devices(); //immagaziono in un vettore i dispositivi trovati
Devices.trimToSize();
Penso che il problema sia nel fatto che la startInquiry non essendo bloccante debba essere gestita in un modo diverso da come ho fatto io, però non ho la più pallida idea di come fare...
Grazie per l'aiuto