Paso 6: Programación Android
La aplicación Android es responsable de obtener datos de internet y enviarlo a ATX2 placa de arduino.
Administrador de Bluetooth y emisor:
paquete com.example.alisson.atx2;
Import android.app.Activity; Import android.bluetooth.BluetoothDevice; Import android.bluetooth.BluetoothSocket; Import android.content.BroadcastReceiver; Import android.content.Context; Import android.content.Intent; Import android.content.IntentFilter; Import android.os.Bundle; Import android.view.Menu; Import android.view.MenuItem; Import android.bluetooth.BluetoothAdapter; importación android.view.View; Import android.widget.ArrayAdapter; Import android.widget.EditText; Import android.widget.ListAdapter; Import android.widget.ListView; Import android.widget.SimpleCursorAdapter; Import android.widget.Toast;
Import com.dropbox.sync.android.DbxAccountManager; Import com.dropbox.sync.android.DbxFile; Import com.dropbox.sync.android.DbxFileSystem; Import com.dropbox.sync.android.DbxPath;
importación java.io.IOException; importación java.io.InputStream; flujo de importación; Import java.util.ArrayList; java.util.Set de importación; importación java.util.UUID;
la clase MainActivity amplía actividad {privado BluetoothSocket mmSocket mmDevice BluetoothDevice privada privada InputStream mmInStream; privado OutputStream mmOutStream;
protegido void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);}
público boolean onCreateOptionsMenu (menú) {/ / inflar el menú, este agrega elementos a la barra de acción si es actual. getMenuInflater () .inflate (R.menu.menu_main, menu); return true;}
público onOptionsItemSelected booleano (elemento MenuItem) {/ / mango de elemento de la barra de acción haga clic aquí. La barra de acción será / / automáticamente mango hace clic en la página de Inicio/botón, tanto tiempo / / como especificar una actividad padre en AndroidManifest.xml. int id = item.getItemId();
noinspection SimplifiableIfStatement si (id == R.id.action_settings) {devuelve true;}
volver super.onOptionsItemSelected(item); }
{público vacío checkDevices (vista)
final int REQUEST_ENABLE_BT = 0; BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); final ArrayList mArrayAdapter = new ArrayList();
Si (mBluetoothAdapter == null) {/ / dispositivo no es compatible con Bluetooth} Si (! mBluetoothAdapter.isEnabled()) {enableBtIntent Intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult (enableBtIntent, REQUEST_ENABLE_BT); //Ativa Bluetooth}
Set pairedDevices = mBluetoothAdapter.getBondedDevices(); Si hay dispositivos emparejados si (pairedDevices.size() > 0) {/ / bucle a través de dispositivos emparejados para (dispositivo de BluetoothDevice: pairedDevices) {/ / el nombre y la dirección a un adaptador de matriz para mostrar en un ListView mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
Contexto contexto = getApplicationContext(); duración de int = Toast.LENGTH_SHORT; Tostadas tostadas = Toast.makeText (contexto, (device.getName() + "\n" + device.getAddress()), duración); if(Device.getName().startsWith("HC")) {ConnectThread ct = new ConnectThread(device); ct.run();} / / toast.show(); } } }
clase privada ConnectThread amplía hilo {}
ConnectThread público (dispositivo de BluetoothDevice) {/ / usar un objeto temporal que más adelante se asigna a mmSocket, / porque mmSocket es final BluetoothSocket tmp = null; mmDevice = dispositivo; UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); Conseguir un BluetoothSocket para conectar con el intento de BluetoothDevice dado {/ / MY_UUID es cadena UUID de app, también utilizado por el servidor código tmp = device.createRfcommSocketToServiceRecord(uuid);} catch (IOException e) {mmSocket = tmp; }
público void run() {tratar {/ / Conecte el dispositivo a través de la toma. Esto bloqueará / / hasta que tiene éxito o lanza una excepción mmSocket.connect(); Contexto contexto = getApplicationContext(); duración de int = Toast.LENGTH_SHORT; Tostadas tostadas = Toast.makeText (duración del contexto, ("SUCESSO")); Toast.Show(); ConnectedThread ct = nuevo ConnectedThread(mmSocket); CT.Write("5"); } catch (IOException connectException) {contexto contexto = getApplicationContext(); duración int = Toast.LENGTH_SHORT; Tostadas tostadas = Toast.makeText (contexto, (connectException.toString()), duración); Toast.Show(); No se puede conectar; cierra el socket y salir try {mmSocket.close();} catch (IOException closeException) {return; }
}
/ ** Se cancelar una conexión en curso y cierra el socket * / público anular cancel() {prueba {mmSocket.close();} catch (IOException e) {}}}
clase privada ConnectedThread amplía hilo {}
ConnectedThread público (socket BluetoothSocket) {//mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; trate de {tmpIn = socket.getInputStream(); tmpOut = socket.getOutputStream();} catch (IOException e) {}
mmInStream = tmpIn; mmOutStream = tmpOut; }
público void run() {búfer de bytes [] = new byte [1024]; / / búfer de almacén para los bytes de stream int; / / bytes devueltos de read()
Seguir escuchando el InputStream hasta que se produce una excepción mientras que (verdad) {prueba {/ / leer los bytes InputStream = mmInStream.read(buffer);
mHandler.obtainMessage (MESSAGE_READ, bytes, -1, buffer) / / .sendToTarget(); } catch (IOException e) {break;}} }
/ * Llamar a esto de la actividad principal para enviar datos al dispositivo remoto * / público void (String mensaje) {}
Byte [] msgBuffer = message.getBytes();
trate de {mmOutStream.write(msgBuffer);} catch (IOException e) {String msg = "onResume() y una excepción ocurrió durante la escritura:" + e.getMessage(); MSG = msg + ".\n\nCheck que el UUID SPP: existe en el server.\n\n"; } }
/ * Llamar a esto de la actividad principal para apagar la conexión * / público anular cancel() {prueba {mmSocket.close();} catch (IOException e) {contexto contexto = getApplicationContext(); duración int = Toast.LENGTH_SHORT; Tostadas tostadas = Toast.makeText (contexto, (e.toString()), duración); Toast.Show();} } }
}