Commit 27f628cb authored by Bruno Agrizzi's avatar Bruno Agrizzi

Corrige #2 👍

parent c1f2bb7c
Pipeline #46 skipped
......@@ -4,6 +4,7 @@
<modules>
<module fileurl="file://$PROJECT_DIR$/BluetoothReceiver.iml" filepath="$PROJECT_DIR$/BluetoothReceiver.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
<module fileurl="file://$PROJECT_DIR$/bluetooth-receiver.iml" filepath="$PROJECT_DIR$/bluetooth-receiver.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
</component>
</project>
\ No newline at end of file
Android BluetoothEvologica Sample
Android BluetoothReceiver Sample
===================================
1 - Introdução: Entendo o Bluetooth
-------------------
Rapidamente falando, Bluetooth é um tecnologia de comunicação baseada em ondas eletromagnéticas na faixa de frequência em torno de 2.4 GHz. Agora, alguns conceitos que nos serão úteis:
> **Conceitos:**
> - **BluetoothAdapter**: No Android, é classe que representa o dispositivo Bluetooth local. Esta classe contem métodos que realizam ações fundamentais como descoberta de dispositivos e criar sockets Bluetooth.
> - **Pareamento**: No protocolo Bluetooth, o pareamento é a maneira pela qual dois dispositivos se tornam conhecidos um para o outro. Os dispositivos só poderão se comunicar se estiverem pareados.
> - **Descoberta**: Uma maneira de saber quais dispositivos Bluetooth existem nas proximidades. Se um dispositivo não está pareado ao dispositivo com o qual deseja se comunicar, é necessário realizar a descoberta antes de fazer o pareamento.
> - **Visibilidade**: Seu dispositivo só será visível a outros dispositivos se você habilitar essa opção. Então, durante a descoberta, apenas os dispositivos vísiveis serão encontrados.
> - **Conexão**: Quando dois dispositivos já estão pareados, a realização de uma conexão cria um canal de comunicação bidirecional entre os aparelhos.
> - **Sockets**: Estrutura que representa a conexão realizada entre os dois dispositivos. Através do socket adquirido na conexão, é possível obter as streams de transmissão e recepção de dados.
----------
2 - Tutorial
-------------------
#### 2.1 Cliente
Como queremos mostrar a captura de dados do sensor bluetooth, necessitamos de um cliente para enviar
os dados. Para essa aplicação de comunicação utilizaremos um serviço de [BluetoothChat](https://github.com/googlesamples/android-BluetoothChat), modificado e simplificado, como cliente para enviar os dados.
Para instalar o cliente, primeiro clone o projeto usando o comando <kbd>git clone</kbd> para baixar a aplicação para sua maquina.
```
$git clone http://gitlab.conexops.com.br/brunoagrizzi/bluetooth-chat.git
```
Após clonar o projeto, importe-o no Android Studio ou no Eclipse como um projeto Android e faça o build em um dispositivo Android (4.4.X ou superior).
Abrar a aplicação e a seguinte tela será encontrada:
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
Toque no botão de bluetooth para parear o dispositivo com outros.
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
> **Obs:** O bluetooth do outro dispositivo deve estar ligado e visivel para o pareamento.
Após o pareamento uma mensagem de conexão será exibida, comfirmando ou não a conexão.
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
Pronto agora é só enviar as mensagens.
#### 2.2 Receiver
Agora iremos importar nossa aplicação Receiver, para receber os dados. Basta executar novamente o comando <kbd>git clone</kbd>, porém com o diretório do receiver.
```
$git clone http://gitlab.conexops.com.br/brunoagrizzi/bluetooth-receiver.git
```
Após clonar o projeto, importe-o no Android Studio ou no Eclipse como um projeto Android e faça o build em um dispositivo Android (4.4.X ou superior).
Abrar a aplicação e a seguinte tela será encontrada:
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
Nessa tela você poderá ligar e desligar o dispositivo bluetooth de seu aparelho, além de deixar ele visivel para o pareamento e exibir os dispositivos já pareados.
Ao tocar para exibir os dispositivos já pareados ira aparecer uma lista.
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
Ao tocar no dispositivo que deseja parear ira confirmar o UUID do dispositivo que deseja parear.
> **Obs:** O UUID é um código que os dispositivos usam para se comunicar, quando um dispositivo não oferece uma interface para alterar, terá que ser fornecido para a troca de dados.
O UUID padrão da nossa aplicação é : **fa87c0d0-afac-11de-8a39-0800200c9a66**
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
Após confirmar, uma tela em branco fica esperando receber os dados do outro dispositivo, neste momento poderá testar a aplicação.
>Em nossa Aplicação os dados estão chegando em **bytes** e sendo convertido para **heradecimal** para a tela, é mostrado o **timestamp** da mensagem (tempo em que foi capturado o dado no formato HH:MM:ss.SSS).
Por fim temos a opção no menu acima de guardar os dados que estão sendo exibidos na tela, em arquivo dentro do dispositivo.
> **Obs:** O diretório padrão de saida do arquivo é: **/Download/Nome_bluethooth_do_dispositivo/timestamp_inicial-timestamp_final.txt**
![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "Logo Title Text 1")
......@@ -5,6 +5,7 @@
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
......
package com.example.brunoagrizzi.evologicabt;
import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.ContactsContract;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
......@@ -38,8 +42,6 @@ public class DataListener extends AppCompatActivity {
public static final String MY_PREFS_NAME = "MyUUID";
private static final String TAG = "DataListener";
private StringBuffer mOutStringBuffer;
private ListView mListView;
......@@ -55,6 +57,12 @@ public class DataListener extends AppCompatActivity {
ArrayList<HashMap<String,String>> mMensagens;
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -212,6 +220,17 @@ public class DataListener extends AppCompatActivity {
int id = item.getItemId();
Boolean hasMsg = false;
if (id == R.id.action_settings) {
//pede permissao para exportar dados
int permission = ActivityCompat.checkSelfPermission(DataListener.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
DataListener.this,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
//Exporta dados
DataStorage msgStore = new DataStorage();
String responseData = "";
......
package com.example.brunoagrizzi.evologicabt;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import java.io.File;
......@@ -17,8 +21,7 @@ public class DataStorage {
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
public void salvarExternalStorage(String text,String nameDir,String nameArq) {
public void salvarExternalStorage(String text, String nameDir, String nameArq) {
// Obtém o estado do storage.
String mediaState = Environment.getExternalStorageState();
......@@ -28,22 +31,21 @@ public class DataStorage {
FileWriter fileWriter = null;
try {
boolean temDiretorio = false;
// Cria o arquivo onde serão salvas as informações.
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + File.separator + nameDir);
if (!dir.exists())
dir.mkdirs();
temDiretorio = dir.mkdirs();
File file = new File(dir, nameArq+".txt");
fileWriter = new FileWriter(file, true);
fileWriter.append(text);
//fileWriter.append("/n");// Quebra de linha.
//fileWriter.append(String.valueOf(numero));
// Escreve no arquivo.
fileWriter.flush();
} catch (IOException e) {
} catch (Exception e) {
Log.e("Erros", "Erro ao salvar usando External Storage", e);
} finally {
// Fecha os recursos.
......
<resources>
<string name="app_name">EvologicaBT</string>
<string name="app_name">Bluetooth Receiver</string>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment