×
Namespaces

Variants
Actions
(Difference between revisions)

Como encontrar dispositivos e serviços Bluetooth

From Nokia Developer Wiki
Jump to: navigation, search
dcrocha (Talk | contribs)
(New page: Para utilizar o protocolo Bluetooth em aplicações [[:Category:Java_ME_(Português)], seu dispositivo precisa implementar JSR-82, Bluetooth API. Um dos principais desafios em aplica...)
 
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot update of Template:ArticleMetaData - Deleting duplicate original translation link)
(9 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 +
{{ArticleMetaData
 +
|sourcecode= <!-- Link to example source code e.g. [[Media:The Code Example ZIP.zip]] -->
 +
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
 +
|devices= <!-- Devices tested against - e.g. ''devices=Nokia 6131 NFC, Nokia C7-00'') -->
 +
|sdk= <!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) -->
 +
|platform= <!-- Compatible platforms - e.g. Symbian^1 and later, Qt 4.6 and later -->
 +
|devicecompatability= <!-- Compatible devices e.g.: All* (must have internal GPS) -->
 +
|dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 -->
 +
|signing=<!-- Signing requirements - empty or one of: Self-Signed, DevCert, Manufacturer -->
 +
|capabilities=<!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. -->
 +
|keywords= <!-- APIs, classes and methods (e.g. QSystemScreenSaver, QList, CBase -->
 +
|id= <!-- Article Id (Knowledge base articles only) -->
 +
|language=Lang-Portuguese
 +
|translated-by=[[User:Dcrocha]]
 +
|translated-from-title=How to search for Bluetooth devices and services
 +
|translated-from-id=19191
 +
|review-by=<!-- After re-review: [[User:username]] -->
 +
|review-timestamp=<!-- After re-review: YYYYMMDD -->
 +
|update-by=<!-- After significant update: [[User:username]]-->
 +
|update-timestamp=<!-- After significant update: YYYYMMDD -->
 +
|creationdate=20071211
 +
|author=[[User:SergioEstevao]]
 +
}}[[Category:Java ME]]
  
Para utilizar o protocolo [[Bluetooth]] em aplicações [[:Category:Java_ME_(Português)], seu dispositivo precisa implementar JSR-82, Bluetooth API.
+
Para utilizar o protocolo [[Bluetooth]] em aplicações [[Portal:Java_ME_(Português) | Java ME]], seu dispositivo precisa implementar JSR-82, Bluetooth API.
  
 
Um dos principais desafios em aplicações Bluetooth é descobrir os endereços de conexão, para devices com serviços específicos disponíveis.
 
Um dos principais desafios em aplicações Bluetooth é descobrir os endereços de conexão, para devices com serviços específicos disponíveis.
Line 20: Line 43:
  
 
public class BTManager implements DiscoveryListener {
 
public class BTManager implements DiscoveryListener {
   // used to store devices we found
+
   // Variável para armazenar os dispositivos encontrados
 
   public Vector btDevicesFound;
 
   public Vector btDevicesFound;
   // used to store service information for each device
+
   // Variável utilizada para armazenar os serviços de cada dispositivo
 
   public Vector btServicesFound;
 
   public Vector btServicesFound;
 
    
 
    
Line 31: Line 54:
  
 
   public int find(UUID[] aServices){         
 
   public int find(UUID[] aServices){         
     // search for devices
+
     // Procurar por dispositivos
 
     findDevices();
 
     findDevices();
     // search for services in the devices found
+
     // Procura por serviços de um determinado serviço
 
     findServices(aServices);
 
     findServices(aServices);
 
     return btDevicesFound.size();
 
     return btDevicesFound.size();
Line 39: Line 62:
 
</code>
 
</code>
  
Como você pode ver, implementaremos a interface <tt>DiscoveryListener</tt>. Esta interface fornece todos os callbacks para nossas chamadas Bluetooth. Vamos começar procurando por dispositivos:
+
Como você pode observar, implementaremos a interface <tt>DiscoveryListener</tt>. Esta interface fornece todos os ''callbacks'' para nossas chamadas Bluetooth. Vamos começar procurando por dispositivos:
  
 
<code java>
 
<code java>
 
public int findDevices() {
 
public int findDevices() {
 
     try {
 
     try {
       // cleans previous elements
+
       // Limpa elementos anteriores
 
       btDevicesFound.removeAllElements();
 
       btDevicesFound.removeAllElements();
       // resets status variable
+
       // Reseta variáveis de status
 
       isBTSearchComplete = false;
 
       isBTSearchComplete = false;
 
       LocalDevice local = LocalDevice.getLocalDevice();
 
       LocalDevice local = LocalDevice.getLocalDevice();
 
       DiscoveryAgent discoveryAgent = local.getDiscoveryAgent();       
 
       DiscoveryAgent discoveryAgent = local.getDiscoveryAgent();       
       // start discovery of new devices
+
       // Inicializa a descoberta por novos dispositivos
 
       discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);
 
       discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);
 
       while ((!isBTSearchComplete)) {
 
       while ((!isBTSearchComplete)) {
         //waits for a fixed time, to avoid long search
+
         //Espera por um intervalo de tempo fixo para evitar longos períodos
 
         synchronized (this) {           
 
         synchronized (this) {           
 
           this.wait(BTManager.BLUETOOTH_TIMEOUT);
 
           this.wait(BTManager.BLUETOOTH_TIMEOUT);
 
         }
 
         }
         // check if search is completed
+
         // Checa se a busca foi completada
 
         if (!isBTSearchComplete) {
 
         if (!isBTSearchComplete) {
           // search no yet completed so let's cancel it
+
           // Descoberta ainda não finalizada. Força a finalização!
 
           discoveryAgent.cancelInquiry(this);
 
           discoveryAgent.cancelInquiry(this);
 
         }
 
         }
Line 66: Line 89:
 
       e.printStackTrace();
 
       e.printStackTrace();
 
     }
 
     }
     // returns the number of devices found
+
     // Retorna o número de dispositivos encontrados
 
     return btDevicesFound.size();
 
     return btDevicesFound.size();
 
   }
 
   }
Line 77: Line 100:
 
   public void inquiryCompleted(int param) {
 
   public void inquiryCompleted(int param) {
 
     isBTSearchComplete = true;
 
     isBTSearchComplete = true;
     // notifies and wake main thread that device search is completed
+
     // Notifica e acorda a thread principal para informar que a descoberta foi completada
 
     synchronized (this) {
 
     synchronized (this) {
 
       this.notify();
 
       this.notify();
Line 88: Line 111:
 
<code java>
 
<code java>
 
public void findServices(UUID[] aServices) {
 
public void findServices(UUID[] aServices) {
     // cleans previous elements
+
     // Limpa elementos adicionados anteriormente
 
     btServicesFound.removeAllElements();
 
     btServicesFound.removeAllElements();
 
     try {
 
     try {
 
       LocalDevice local = LocalDevice.getLocalDevice();
 
       LocalDevice local = LocalDevice.getLocalDevice();
 
       DiscoveryAgent discoveryAgent = local.getDiscoveryAgent();
 
       DiscoveryAgent discoveryAgent = local.getDiscoveryAgent();
       // discover services
+
       // Descoberta de serviços
 
       if (btDevicesFound.size() > 0) {
 
       if (btDevicesFound.size() > 0) {
 
         for (int i = 0; i < btDevicesFound.size(); i++) {
 
         for (int i = 0; i < btDevicesFound.size(); i++) {
 
           isBTSearchComplete = false;
 
           isBTSearchComplete = false;
           // adds a null element in case we don't found service
+
           // Adiciona uma referência null no caso de não dispositivos não serem descobertos
 
           btServicesFound.addElement(null);
 
           btServicesFound.addElement(null);
 
           int transID = discoveryAgent.searchServices(null, aServices,
 
           int transID = discoveryAgent.searchServices(null, aServices,
 
               (RemoteDevice) (btDevicesFound.elementAt(i)), this);
 
               (RemoteDevice) (btDevicesFound.elementAt(i)), this);
           // wait for service discovery ends
+
           // Espera até que a descoberta dos serviços sejam finalizados
 
           synchronized (this) {
 
           synchronized (this) {
 
             this.wait(BTManager.BLUETOOTH_TIMEOUT);
 
             this.wait(BTManager.BLUETOOTH_TIMEOUT);
Line 124: Line 147:
 
  public void serviceSearchCompleted(int transID, int respCode) {
 
  public void serviceSearchCompleted(int transID, int respCode) {
 
     isBTSearchComplete = true;
 
     isBTSearchComplete = true;
     // notifies and wake mains thread that service search is completed
+
     // Notifica e acorda a thread principal para informar a finalização da descoberta de serviços
 
     synchronized (this) {
 
     synchronized (this) {
 
       this.notify();
 
       this.notify();
Line 131: Line 154:
 
</code>
 
</code>
  
Depois que pegamos todos os dados armazenados em nossos Vectors, precisamos apenas adicionar dois novos métodos, um para buscar a URL de conexão e outro para obter o nome amigável (friendly name) do aparelho, pois para o usuário final endereços MAC de dispositivos Bluetooth não são muito úteis.
+
Depois que obtermos todos os dados armazenados nos objetos Vectors, precisamos apenas adicionar dois novos métodos, um para buscar a URL de conexão e outro para obter o nome amigável (friendly name) do aparelho, pois para o usuário final endereços MAC de dispositivos Bluetooth não são muito úteis.
  
 
<code java>
 
<code java>
Line 155: Line 178:
 
</code>
 
</code>
  
Com esses últimos métodos completamos nossa classe Bluetooth finder. Você pode checar o código-fonte complete onde eu mostro um exemplo de como usá-lo para buscar por um dispositivo GPS Bluetooth.
+
Com esses últimos métodos, completamos nossa classe Bluetooth finder. Você pode checar o código-fonte completo onde eu mostro um exemplo de como usá-lo para buscar por um dispositivo GPS Bluetooth.
  
 
== Downloads ==
 
== Downloads ==
* [http://sergioestevao.com/midp/wp-content/uploads/2007/11/bluetoothgps-source-code.rar Full Source Code]
+
* [http://sergioestevao.com/midp/files/2008/08/bluetoothgps-source-code.rar Full Source Code]
* [http://sergioestevao.com/midp/wp-content/uploads/2007/11/bluetoothgps.jad Jad File]
+
* [http://sergioestevao.com/midp/files/2008/08/bluetoothgps.jad Jad File]
* [http://sergioestevao.com/midp/wp-content/uploads/2007/11/bluetoothgps.jar Jar File]
+
* [http://sergioestevao.com/midp/files/2008/08/bluetoothgps.jar Jar File]
  
[[Category:Lang-PT]][[Category:Exemplos de código Java ME]][[Category:Java ME (Português)]]
+
[[Category:Lang-Portuguese]][[Category:Code Examples]]
 +
<!-- Translation --> [[en:How to search for Bluetooth devices and services]]

Revision as of 09:37, 8 December 2011

Article Metadata

Artigo
Tradução:
Por dcrocha
Última alteração feita por hamishwillee em 08 Dec 2011

Para utilizar o protocolo Bluetooth em aplicações Java ME, seu dispositivo precisa implementar JSR-82, Bluetooth API.

Um dos principais desafios em aplicações Bluetooth é descobrir os endereços de conexão, para devices com serviços específicos disponíveis.

No próximo exemplo implementaremos este código usando uma classe chamada BtManager.

Vamos começar criando a classe e algumas variáveis para armazenar nossos resultados.

import java.util.Vector;
// bluetooth classes
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;
 
public class BTManager implements DiscoveryListener {
// Variável para armazenar os dispositivos encontrados
public Vector btDevicesFound;
// Variável utilizada para armazenar os serviços de cada dispositivo
public Vector btServicesFound;
 
public BTManager() {
btDevicesFound = new Vector();
btServicesFound = new Vector();
}
 
public int find(UUID[] aServices){
// Procurar por dispositivos
findDevices();
// Procura por serviços de um determinado serviço
findServices(aServices);
return btDevicesFound.size();
}

Como você pode observar, implementaremos a interface DiscoveryListener. Esta interface fornece todos os callbacks para nossas chamadas Bluetooth. Vamos começar procurando por dispositivos:

public int findDevices() {
try {
// Limpa elementos anteriores
btDevicesFound.removeAllElements();
// Reseta variáveis de status
isBTSearchComplete = false;
LocalDevice local = LocalDevice.getLocalDevice();
DiscoveryAgent discoveryAgent = local.getDiscoveryAgent();
// Inicializa a descoberta por novos dispositivos
discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);
while ((!isBTSearchComplete)) {
//Espera por um intervalo de tempo fixo para evitar longos períodos
synchronized (this) {
this.wait(BTManager.BLUETOOTH_TIMEOUT);
}
// Checa se a busca foi completada
if (!isBTSearchComplete) {
// Descoberta ainda não finalizada. Força a finalização!
discoveryAgent.cancelInquiry(this);
}
}
} catch (Exception e) {
e.printStackTrace();
}
// Retorna o número de dispositivos encontrados
return btDevicesFound.size();
}
 
public void deviceDiscovered(RemoteDevice remoteDevice,
DeviceClass deviceClass) {
btDevicesFound.addElement(remoteDevice);
}
 
public void inquiryCompleted(int param) {
isBTSearchComplete = true;
// Notifica e acorda a thread principal para informar que a descoberta foi completada
synchronized (this) {
this.notify();
}
}

Agora que temos uma lista de dispositivos, vamos procurar apenas aqueles serviços que nos interessam:

public void findServices(UUID[] aServices) {
// Limpa elementos adicionados anteriormente
btServicesFound.removeAllElements();
try {
LocalDevice local = LocalDevice.getLocalDevice();
DiscoveryAgent discoveryAgent = local.getDiscoveryAgent();
// Descoberta de serviços
if (btDevicesFound.size() > 0) {
for (int i = 0; i < btDevicesFound.size(); i++) {
isBTSearchComplete = false;
// Adiciona uma referência null no caso de não dispositivos não serem descobertos
btServicesFound.addElement(null);
int transID = discoveryAgent.searchServices(null, aServices,
(RemoteDevice) (btDevicesFound.elementAt(i)), this);
// Espera até que a descoberta dos serviços sejam finalizados
synchronized (this) {
this.wait(BTManager.BLUETOOTH_TIMEOUT);
}
if (!isBTSearchComplete) {
discoveryAgent.cancelServiceSearch(transID);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
 
public void servicesDiscovered(int param, ServiceRecord[] serviceRecord) {
int index = btServicesFound.size() - 1;
for (int i = 0; i < serviceRecord.length; i++) {
btServicesFound.setElementAt(serviceRecord[i], index);
}
}
 
public void serviceSearchCompleted(int transID, int respCode) {
isBTSearchComplete = true;
// Notifica e acorda a thread principal para informar a finalização da descoberta de serviços
synchronized (this) {
this.notify();
}
}

Depois que obtermos todos os dados armazenados nos objetos Vectors, precisamos apenas adicionar dois novos métodos, um para buscar a URL de conexão e outro para obter o nome amigável (friendly name) do aparelho, pois para o usuário final endereços MAC de dispositivos Bluetooth não são muito úteis.

  public String getDeviceName(int deviceID) {
try {
return ((RemoteDevice) btDevicesFound.elementAt(deviceID))
.getFriendlyName(false);
} catch (Exception e) {
e.printStackTrace();
}
return "Error";
}
 
public String getServiceURL(int deviceID) {
try {
return ((ServiceRecord) btServicesFound.elementAt(deviceID))
.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
} catch (Exception e) {
e.printStackTrace();
}
return "Error";
}

Com esses últimos métodos, completamos nossa classe Bluetooth finder. Você pode checar o código-fonte completo onde eu mostro um exemplo de como usá-lo para buscar por um dispositivo GPS Bluetooth.

Downloads

93 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×