×
Namespaces

Variants
Actions
(Difference between revisions)

Como encontrar dispositivos e serviços Bluetooth

From Nokia Developer Wiki
Jump to: navigation, search
dcrocha (Talk | contribs)
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot update of Template:ArticleMetaData - Deleting duplicate original translation link)
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Para utilizar o protocolo [[Bluetooth]] em aplicações [[:Category:Java_ME_(Português) | Java ME]], seu dispositivo precisa implementar JSR-82, Bluetooth API.
+
{{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 [[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 19: 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 30: 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 38: 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 65: 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 76: 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 87: 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 123: 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 130: 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 154: 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

86 page views in the last 30 days.
×