SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
Android & Bluetooth
hacking e applicazioni




   Stefano Sanna
    http://www.gerdavax.it
Agenda
•   Speaker

•   Bluetooth & Android

•   È tempo di hacking!

•   Bluetooth su Android 1.x
•   Bluetooth su Android 2.x

•   Demo

•   Conclusioni
Speaker
• Mobile Development Architect @ beeweeb SpA
   – http://www.beeweeb.com

• Author of “Java Micro Edition network programming”
   – Hoepli Editore, 2007
   – http://www.gerdavax.it/jmebook

• Author of Bluetooth API for Android 1.x
   – http://code.google.com/p/android-bluetooth

• Founder of QuadraSpace Project
   – http://www.quadraspace.org




                        Android & Bluetooth, hacking e applicazioni
Bluetooth su Android
• early Android
   – Wrapper Java su Bluez

• Android 0.9
   – Sparisce l’API Bluetooth!

• Android 1.x
   – Nessuna API per gli sviluppatori

• Android 2.x
   – Introduce una API che consente il discovery di device remoti, di aprire
     connessioni RFCOMM client e server




                         Android & Bluetooth, hacking e applicazioni
L’importanza di Bluetooth
• Senza una API dedicata non è possibile:

   – Discovery di device e servizi

   – Trasferimento file con Bluetooth FTP e OBEX

   – Connessioni a GPS, gamepad, apparati medicali

   – Controllo remoto di moduli embedded e sensor network

   – Applicazioni di robotica (LEGO Mindstorms, etc...)




                         Android & Bluetooth, hacking e applicazioni
Tanti device la’ fuori...




            Android & Bluetooth, hacking e applicazioni
È tempo di hacking!


      Android & Bluetooth, hacking e applicazioni
Strumenti per hacking sano
• Le utility di sistema di Android sono scritte in Java, come
  le applicazioni di terze parti
   – “Se possono farlo loro, possiamo farlo anche noi!”

• Il sorgente di Android è disponibile!
   – http://source.android.com

• I servizi di sistema sono accessibili attraverso un
  meccanismo di query basato su chiavi stringa
   – Context.getSystemService(String name)

• Java fornisce uno sofisticato motore di introspezione


                         Android & Bluetooth, hacking e applicazioni
System Service & Reflection
 • Il Bluetooth Service è accessibile come qualsiasi altro
   Android Service:
Object bluetoothService = context.getSystemService(“bluetooth”);



    A questo punto, ottenuta la classe, si può utilizzare la
    reflection per conoscerne (e invocarne!) i metodi:


Class bluetoothServiceClass = bluetoothService.class;

Method[] bluetoothMethods = bluetoothServiceClass.getMethods();




                        Android & Bluetooth, hacking e applicazioni
Metodi disponibili

                      O !
                     P O
public android.bluetooth.BluetoothDevice(android.bluetooth.IBluetoothDevice)




                    P S
public boolean android.bluetooth.BluetoothDevice.cancelBondProcess(java.lang.String)
public void android.bluetooth.BluetoothDevice.cancelDiscovery()
public boolean android.bluetooth.BluetoothDevice.cancelPin(java.lang.String)




                   O ES
public boolean android.bluetooth.BluetoothDevice.createBond(java.lang.String)
public boolean android.bluetooth.BluetoothDevice.disable()
public boolean android.bluetooth.BluetoothDevice.disconnectRemoteDeviceAcl(java.lang.String)




                  R L
public boolean android.bluetooth.BluetoothDevice.enable()
public java.lang.String android.bluetooth.BluetoothDevice.getAddress()




                T P
public int android.bluetooth.BluetoothDevice.getBluetoothState()
public int android.bluetooth.BluetoothDevice.getBondState(java.lang.String)
public java.lang.String android.bluetooth.BluetoothDevice.getCompany()
public int android.bluetooth.BluetoothDevice.getDiscoverableTimeout()
public java.lang.String android.bluetooth.BluetoothDevice.getManufacturer()
public java.lang.String android.bluetooth.BluetoothDevice.getName()
public int android.bluetooth.BluetoothDevice.getRemoteClass(java.lang.String)




                  M
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteCompany(java.lang.String)
public [B android.bluetooth.BluetoothDevice.getRemoteFeatures(java.lang.String)
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteManufacturer(java.lang.String)




                 O
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteName(java.lang.String)
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteRevision(java.lang.String)




               C
public boolean android.bluetooth.BluetoothDevice.getRemoteServiceChannel
(java.lang.String,short,android.bluetooth.IBluetoothDeviceCallback)
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteVersion(java.lang.String)
public java.lang.String android.bluetooth.BluetoothDevice.getRevision()
public int android.bluetooth.BluetoothDevice.getScanMode()
public java.lang.String android.bluetooth.BluetoothDevice.getVersion()
public boolean android.bluetooth.BluetoothDevice.isAclConnected(java.lang.String)
public boolean android.bluetooth.BluetoothDevice.isDiscovering()
...


                                    Android & Bluetooth, hacking e applicazioni
Bluetooth API for Android 1.x
• Esporta le funzionalità del BluetoothService attraverso
  l’uso della reflection e alcune classi di utility
• Funzionalità:
   –   accensione/spegnimento Bluetooth
   –   modifica visibilità
   –   inquiry di dispositivi remoti
   –   discovery della porta RFCOMM port di un servizio
   –   apertura connessioni RFCOMM client

• Funziona senza la necessità di accesso root

• Check it out!
   – http://code.google.com/p/android-bluetooth

                         Android & Bluetooth, hacking e applicazioni
Permission
  • Primo passo: per accedere alle funzionalità Bluetooth
    occorre dichiarare due Permission nel Manifest
    dell’applicazione:



<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />




                        Android & Bluetooth, hacking e applicazioni
Classi
• LocalBluetoothDevice
   – è il singleton del modulo Bluetooth locale
   – permette attivazione/disattivazione, discovery, pairing
   – notifica gli eventi attraverso l’interfaccia LocalBluetoothDeviceListener
• RemoteBluetoothDevice
   – è un riferimento ad un device Bluetooth remoto
   – permette apertura/chiusura di socket RFCOMM client
   – notifica gli eventi attraverso l’interfaccia
     RemoteBluetoothDeviceListener
• BluetoothSocket
   – rappresenta una connessione client su porta RFCOMM
   – fornisce InputStream e OutputStream verso il device remoto



                          Android & Bluetooth, hacking e applicazioni
Da rilasciare con il

  Device discovery                                           metodo close() quando
                                                             il contesto viene distrutto




LocalBluetoothDevice local = LocalBluetoothDevice.init(context);

local.setListener(new LocalBluetoothDeviceListener() {

      public void scanStarted() {
         // e’ partita la scansione...
      }

       public void scanCompleted(ArrayList<String> devices) {
         // scansione completata
      }
});

local.scan();     // avvia la scansione...




                          Android & Bluetooth, hacking e applicazioni
Socket RFCOMM

RemoteBluetoothDevice dev = local.getRemoteBluetoothDevice(address);

dev.setListener(new RemoteBluetoothDeviceListener() {

      public void paired() {
        // si aprono socket e stream I/O...
        BluetoothSocket socket = dev.openSocket(1);
        InputStream input = socket.getInputStream();
                                                                         3
        OutputStream output = socket.getOutputStream();
      }

      public void pinRequested() {
         // mostra la dialog per l’inserimento del PIN                   2
      }
});

dev.pair();      1

                           Android & Bluetooth, hacking e applicazioni
Device compatibili
•   HTC Dream
•   HTC Magic
•   HTC Tattoo
•   Huawei U8220
•   Samsung Galaxy i7500
•   Samsung Galaxy i5700
•   Sony-Ericsson XPERIA X10
•   Geeksphone ONE
•   LG LinkMe (solo discovery)



                    Android & Bluetooth, hacking e applicazioni
Non sono ancora

  Frammentazione                                          disponibili terminali con
                                                          Android 2.2 “Froyo”




      1.1        1.5           1.6               2.0                 2.0.1            2.1

100

 80

 60

 40

 20

  0
       01/2010           04/2010                  1h 05/2010                 2h 05/2010
                       Android & Bluetooth, hacking e applicazioni
Chi la usa?
• Oltre 2600 download!

• Utilizzata in progetti commerciali e free:
   – Ha ispirato la realizzazione di Bluetooth File Transfer di Medieval
     Software, l’applicazione di trasferimento file di maggior successo
     nell’Android Market (oltre 1 milione di download)
   – È utilizzata in Amarino (sviluppato al MIT), primo framework di controllo
     di Arduino attraverso Android
   – È utilizzata in GoPayment di Intuit Inc., per il pagamento con carta di
     credito attraverso swiper e stampante BT
   – È utilizza in SensLink di Sensaris per la lettura dei dati rilevati dai
     sensori “indossabili” SensPod




                         Android & Bluetooth, hacking e applicazioni
Principali limitazioni
• Non è possibile registrare un servizio sul database SDP
  (Service Discovery Protocol), benché sia possibile
  creare socket server RFCOMM (in sviluppo)

• Se si utilizza la funzionalità di device inquiry subito dopo
  l’avvio del telefono, la chiamata nativa interferisce con
  un processo di scansione del sistema e lo stack
  Bluetooth diventa inutilizzabile

• Problemi di compatibilità con HTC Hero e LG GW620
  “LinkMe”


                     Android & Bluetooth, hacking e applicazioni
Permission su socket dbus
                      Le applicazioni di terze parti
                      non possono accedere servizio
                      SDP Bluetooth via dbus




          Android & Bluetooth, hacking e applicazioni
Nessuna novità sul

L’API di Android 2.x                                                    fronte Bluetooth in
                                                                        Android 2.2 “Froyo”




• Bluetooth ufficialmente nell'SDK!
• Funzionalità:
   – accensione/spegnimento Bluetooth
   – inquiry di dispositivi remoti
   – apertura connessioni RFCOMM client e server

• Android style: basato su Intents and Receivers

• Alcune importanti limitazioni
   –   Nessun controllo diretto sul pairing
   –   Accesso diretto ai canali RFCOMM non consentito
   –   Discovery dei servizi non supportato
   –   Visibility non attivabile automaticamente da applicazione
   –   Servizio OBEX già registrato dal sistema...
                          Android & Bluetooth, hacking e applicazioni
Classi
• BluetoothAdapter
   – È il singleton che gestisce le risorse del modulo Bluetooth locale
   – Notifica gli eventi attraverso Broadcast Receiver
• BluetoothDevice
   – Rappresenta il riferimento ad un device Bluetooth remoto
• BluetoothSocket
   – Gestisce i client socket RFCOMM indirizzati attraverso record SDP
   – Non consente l’indirizzamento diretto ad un canale RFCOMM noto
• BluetoothServerSocket
   – Consente la creazione di server socket
• BluetoothClass
   – Definisce le costanti di DEVICE & SERVICE CLASS di Bluetooth


                         Android & Bluetooth, hacking e applicazioni
Attivazione Bluetooth
  • Benché l’applicazione possa attivare autonomamente il
    servizio Bluetooth, l’uso della via procedurale deve
    essere accompagnato da apposita informativa all’utente

  • Il sistema offre una Action
    (ACTION_REQUEST_ENABLE) che delega al sistema
    operativo l’interazione con l’utente e l’attivazione dello
    stack Bluetooth in caso di conferma:


Intent enableBt = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBt, REQUEST_ENABLE_BT);


                        Android & Bluetooth, hacking e applicazioni
Visibility
 • Solo le utility del sistema operativo possono rendere il
   dispositivo visibile sulla rete Bluetooth

 • Per rendere visibile TEMPORANEAMENTE il terminale
   Android è necessario, ancora una volta, lanciare un
   Intent:


Intent enableBt = new Intent
                       (BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);

startActivityForResult(enableBt, REQUEST_ENABLE_DISCOVERABLE);




                        Android & Bluetooth, hacking e applicazioni
Discovery in Android 2.x


BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

IntentFilter filter = new IntentFilter();

filter.addAction(BluetoothDevice.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

context.registerReceiver(receiver, filter);

adapter.startDiscovery();




                        Android & Bluetooth, hacking e applicazioni
Broadcast Receiver
private final BroadcastReceiver receiver = new BroadcastReceiver() {

     public void onReceive(Context ctx, Intent intent) {

          final String action = intent.getAction();
                if (action.equals() {

                   // let’s show a progress dialog ;-)

                } else if (action.equals(BluetoothDevice.ACTION_FOUND)) {
                   BluetoothDevice device = (BluetoothDevice)
                  intent.getParcelableExtra
                                       (BluetoothDevice.EXTRA_DEVICE);

                  // process device
               } else if (action.equals
               (BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
                  // done
               }
      }
};


                            Android & Bluetooth, hacking e applicazioni
Socket e I/O Stream

// dato un BluetoothDevice valido...

UUID uuidOfTargetService = UUID.nameUUIDFromBytes
                                (“2d26618601fb47c28d9f10b8ec891363”);

BluetoothSocket socket = device.createRfcommSocketToServiceRecord
                                               (uuidOfTargetService);

socket.connect();

InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();

....

socket.close();



                        Android & Bluetooth, hacking e applicazioni
Hacking su Android 2.x
 • I progettisti di Android hanno... mangiato la foglia :-)
     – La reflection è arginata da un più ferreo meccanismo di permission. Ad
       esempio, il metodo setScanMode

public boolean android.bluetooth.BluetoothAdapter.setScanMode(int)


        esiste nella libreria standard ma non è menzionato nella
        documentazione ufficiale. Il tentativo di invocarlo via reflection solleva
        un’eccezione di sicurezza:



java.lang.SecurityException: Need WRITE_SECURE_SETTINGS permission:
Neither user 10097 nor current process has
android.permission.WRITE_SECURE_SETTINGS.



                            Android & Bluetooth, hacking e applicazioni
Hacking su Android 2.x
 • Altri metodi hanno comportamenti imprevedibili. Ad
   esempio:

public android.bluetooth.BluetoothSocket
android.bluetooth.BluetoothDevice.createInsecureRfcommSocket(int)

public android.bluetooth.BluetoothSocket
android.bluetooth.BluetoothDevice.createRfcommSocket(int)



    consentono di aprire un RFCOMM client socket ad un
    canale assegnato e funzionano senza eccezioni su
    Motorola Milestone e Google Nexus One. Su HTC
    Legend, invece, il parametro intero è interpretato come
    UUID subclass e non come numero di canale! Crash!

                        Android & Bluetooth, hacking e applicazioni
DEMO


Android & Bluetooth, hacking e applicazioni
Android controlla Arduino
• Utilizzando Arduino Bluetooth è possibile
  realizzare un termometro remoto e un
  semplice attuatore che accende un LED




                    Android & Bluetooth, hacking e applicazioni
Arduino
• “Arduino is an open-source electronics prototyping
  platform based on flexible, easy-to-use hardware and
  software. [...] It can sense the environment by receiving
  input from a variety of sensors and can affect its
  surroundings by controlling lights, motors, and other
  actuators”

• Rigorosamente MADE IN ITALY!

• http://www.arduino.cc




                    Android & Bluetooth, hacking e applicazioni
Hardware utilizzato:
    Sorgente Arduino                                               • Arduino Bluetooth
                                                                   • Prototype shield e breadboard
                                                                   • LM35 Temperature Sensor
int LED_PIN = 13;    int LM35_PIN = 2;

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {
    int inByte = Serial.read();

    switch (inByte) {
       case '1':
         digitalWrite(LED_PIN, HIGH);
         Serial.write('1');
         break;
       case '0':
                                                  void readTemp() {
         digitalWrite(LED_PIN, LOW);
                                                    int temp = analogRead(LM35_PIN);
         Serial.write('0');
         break;                                     temp= ( 5.0 * temp * 100.0) / 1024.0;
       case 'r':                                    Serial.write(temp);
         readTemp();                              }
         break;
    }
}

                                  Android & Bluetooth, hacking e applicazioni
Sorgente Android

// definiamo i comandi...
byte LED_ON_REQUEST = ‘1’;
byte LED_OFF_REQUEST = ‘0’;
byte READ_TEMPERATURE = ‘r’;

[...]

// all’interno del Thread inviamo comandi e leggiamo le risposte...
output.write(request);
final int response = input.read();

if (request == 'r') {
   handler.post(new Runnable() {
      public void run() {
         String temp = Integer.toString(response);
         Toast.makeText(Controller.this, "LM35 Sensor: " + temp + "°C", 4000).show();

        });
}




                               Android & Bluetooth, hacking e applicazioni
Sensori industriali
• Il supporto Bluetooth può essere utilizzato per ricevere
  dati da sensori wireless industriali

• Nell’ambito del progetto opensource
  QuadraSpace, il primo prototipo di
  data sampler mobile è costituito da
  un HTC Dream (1.6) connesso ad un
  SensPod in grado di acquisire
  temperatura e umidità, ossidi di azoto
  (NOx) e CO2
   – http://www.sensaris.com




                       Android & Bluetooth, hacking e applicazioni
Conclusioni
• Il protocollo Bluetooth è ormai consolidato e consente
  l’interfacciamento a dispositivi utilizzati in numerosi
  domini applicativi

• Pur con qualche limitazione, è possibile disporre di
  funzionalità base Bluetooth sia su codebase 1.x
  (attraverso il progetto android-bluetooth) sia su
  codebase 2.x (attraverso l’API ufficiale)

• Sono in fase di sviluppo estensioni HDP (Heath Device
  Profile), eL2CAP e MCAP per l’interfacciamento a device
  medicali

                    Android & Bluetooth, hacking e applicazioni
Risorse
• Android
   – http://developer.android.com
   – http://source.android.com

• Bluetooth API for Android 1.x e Easy Bluetooth
   – http://code.google.com/p/android-bluetooth

• Arduino
   – http://www.arduino.cc

• QuadraSpace Project
   – http://www.quadraspace.org




                        Android & Bluetooth, hacking e applicazioni
GRAZIE!


    Stefano Sanna
     –   Blog: http://www.gerdavax.it
     –   email: gerdavax AT gmail DOT com
     –   Skype: gerdavax
     –   Twitter: @gerdavax



•   Ringrazio Emanuele Di Saverio che ha collaborato alla realizzazione delle versione originale di
    queste slide e della demo su Arduino, presentati a Java Day 2010 (Roma)




                                  Android & Bluetooth, hacking e applicazioni

Contenu connexe

Similaire à Android & Bluetooth: hacking e applicazioni

Bluetooth Low Energy: la rivoluzione silenziosa dell’ambient intelligence
Bluetooth Low Energy: la rivoluzione silenziosa dell’ambient intelligenceBluetooth Low Energy: la rivoluzione silenziosa dell’ambient intelligence
Bluetooth Low Energy: la rivoluzione silenziosa dell’ambient intelligenceCodemotion
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low EnergyStefano Sanna
 
Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Andrea Tosato
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidOpen Makers Italy
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functionsdotnetcode
 
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Massimo Bonanni
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Riccardo Mancinelli
 
Win04 windows 8 e windows phone 8 - interfacciamoci
Win04   windows 8 e windows phone 8 - interfacciamociWin04   windows 8 e windows phone 8 - interfacciamoci
Win04 windows 8 e windows phone 8 - interfacciamociDotNetCampus
 
Asynchronous Java ME and XML
Asynchronous Java ME and XMLAsynchronous Java ME and XML
Asynchronous Java ME and XMLAndrea Castello
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net Leonardo Alario
 
Sviluppare per Microsoft Band
Sviluppare per Microsoft BandSviluppare per Microsoft Band
Sviluppare per Microsoft BandMassimo Bonanni
 
Custom vision on edge device
Custom vision on edge deviceCustom vision on edge device
Custom vision on edge deviceAlessio Biasiutti
 
IoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceIoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceAlessio Biasiutti
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione AvanzataStefano Sanna
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play frameworkCSP Scarl
 
Sviluppare per microsoft band
Sviluppare per microsoft bandSviluppare per microsoft band
Sviluppare per microsoft bandDotNetCampus
 
SVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDSVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDDotNetCampus
 

Similaire à Android & Bluetooth: hacking e applicazioni (20)

Bluetooth Low Energy: la rivoluzione silenziosa dell’ambient intelligence
Bluetooth Low Energy: la rivoluzione silenziosa dell’ambient intelligenceBluetooth Low Energy: la rivoluzione silenziosa dell’ambient intelligence
Bluetooth Low Energy: la rivoluzione silenziosa dell’ambient intelligence
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low Energy
 
Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018
 
Android
AndroidAndroid
Android
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functions
 
Io, Android
Io, AndroidIo, Android
Io, Android
 
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
Bluetooth low energy & Lumia Sensor Core per Windows Phone 8.1
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30
 
Win04 windows 8 e windows phone 8 - interfacciamoci
Win04   windows 8 e windows phone 8 - interfacciamociWin04   windows 8 e windows phone 8 - interfacciamoci
Win04 windows 8 e windows phone 8 - interfacciamoci
 
Asynchronous Java ME and XML
Asynchronous Java ME and XMLAsynchronous Java ME and XML
Asynchronous Java ME and XML
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
Sviluppare per Microsoft Band
Sviluppare per Microsoft BandSviluppare per Microsoft Band
Sviluppare per Microsoft Band
 
Custom vision on edge device
Custom vision on edge deviceCustom vision on edge device
Custom vision on edge device
 
IoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceIoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge device
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play framework
 
Sviluppare per microsoft band
Sviluppare per microsoft bandSviluppare per microsoft band
Sviluppare per microsoft band
 
SVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDSVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BAND
 

Plus de Stefano Sanna

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Stefano Sanna
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldStefano Sanna
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017 Stefano Sanna
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in actionStefano Sanna
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconStefano Sanna
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented SmartphoneStefano Sanna
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidStefano Sanna
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVStefano Sanna
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniStefano Sanna
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsStefano Sanna
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappoleStefano Sanna
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0Stefano Sanna
 
Comunicazione Pervasiva
Comunicazione PervasivaComunicazione Pervasiva
Comunicazione PervasivaStefano Sanna
 
Introduzione alla tecnologia Sun SPOT
Introduzione alla tecnologia Sun SPOTIntroduzione alla tecnologia Sun SPOT
Introduzione alla tecnologia Sun SPOTStefano Sanna
 
Sensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliSensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliStefano Sanna
 
Introducing the Sun SPOTs
Introducing the Sun SPOTsIntroducing the Sun SPOTs
Introducing the Sun SPOTsStefano Sanna
 

Plus de Stefano Sanna (20)

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical world
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in action
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeacon
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented Smartphone
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera Android
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TV
 
Introduzione ad NFC
Introduzione ad NFCIntroduzione ad NFC
Introduzione ad NFC
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioni
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile Applications
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappole
 
Android
AndroidAndroid
Android
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0
 
Sun SPOT
Sun SPOTSun SPOT
Sun SPOT
 
Comunicazione Pervasiva
Comunicazione PervasivaComunicazione Pervasiva
Comunicazione Pervasiva
 
Introduzione alla tecnologia Sun SPOT
Introduzione alla tecnologia Sun SPOTIntroduzione alla tecnologia Sun SPOT
Introduzione alla tecnologia Sun SPOT
 
Sensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi MobiliSensoristica Avanzata per Dispositivi Mobili
Sensoristica Avanzata per Dispositivi Mobili
 
Introducing the Sun SPOTs
Introducing the Sun SPOTsIntroducing the Sun SPOTs
Introducing the Sun SPOTs
 
Mobile HW Mashup
Mobile HW MashupMobile HW Mashup
Mobile HW Mashup
 

Android & Bluetooth: hacking e applicazioni

  • 1. Android & Bluetooth hacking e applicazioni Stefano Sanna http://www.gerdavax.it
  • 2. Agenda • Speaker • Bluetooth & Android • È tempo di hacking! • Bluetooth su Android 1.x • Bluetooth su Android 2.x • Demo • Conclusioni
  • 3. Speaker • Mobile Development Architect @ beeweeb SpA – http://www.beeweeb.com • Author of “Java Micro Edition network programming” – Hoepli Editore, 2007 – http://www.gerdavax.it/jmebook • Author of Bluetooth API for Android 1.x – http://code.google.com/p/android-bluetooth • Founder of QuadraSpace Project – http://www.quadraspace.org Android & Bluetooth, hacking e applicazioni
  • 4. Bluetooth su Android • early Android – Wrapper Java su Bluez • Android 0.9 – Sparisce l’API Bluetooth! • Android 1.x – Nessuna API per gli sviluppatori • Android 2.x – Introduce una API che consente il discovery di device remoti, di aprire connessioni RFCOMM client e server Android & Bluetooth, hacking e applicazioni
  • 5. L’importanza di Bluetooth • Senza una API dedicata non è possibile: – Discovery di device e servizi – Trasferimento file con Bluetooth FTP e OBEX – Connessioni a GPS, gamepad, apparati medicali – Controllo remoto di moduli embedded e sensor network – Applicazioni di robotica (LEGO Mindstorms, etc...) Android & Bluetooth, hacking e applicazioni
  • 6. Tanti device la’ fuori... Android & Bluetooth, hacking e applicazioni
  • 7. È tempo di hacking! Android & Bluetooth, hacking e applicazioni
  • 8. Strumenti per hacking sano • Le utility di sistema di Android sono scritte in Java, come le applicazioni di terze parti – “Se possono farlo loro, possiamo farlo anche noi!” • Il sorgente di Android è disponibile! – http://source.android.com • I servizi di sistema sono accessibili attraverso un meccanismo di query basato su chiavi stringa – Context.getSystemService(String name) • Java fornisce uno sofisticato motore di introspezione Android & Bluetooth, hacking e applicazioni
  • 9. System Service & Reflection • Il Bluetooth Service è accessibile come qualsiasi altro Android Service: Object bluetoothService = context.getSystemService(“bluetooth”); A questo punto, ottenuta la classe, si può utilizzare la reflection per conoscerne (e invocarne!) i metodi: Class bluetoothServiceClass = bluetoothService.class; Method[] bluetoothMethods = bluetoothServiceClass.getMethods(); Android & Bluetooth, hacking e applicazioni
  • 10. Metodi disponibili O ! P O public android.bluetooth.BluetoothDevice(android.bluetooth.IBluetoothDevice) P S public boolean android.bluetooth.BluetoothDevice.cancelBondProcess(java.lang.String) public void android.bluetooth.BluetoothDevice.cancelDiscovery() public boolean android.bluetooth.BluetoothDevice.cancelPin(java.lang.String) O ES public boolean android.bluetooth.BluetoothDevice.createBond(java.lang.String) public boolean android.bluetooth.BluetoothDevice.disable() public boolean android.bluetooth.BluetoothDevice.disconnectRemoteDeviceAcl(java.lang.String) R L public boolean android.bluetooth.BluetoothDevice.enable() public java.lang.String android.bluetooth.BluetoothDevice.getAddress() T P public int android.bluetooth.BluetoothDevice.getBluetoothState() public int android.bluetooth.BluetoothDevice.getBondState(java.lang.String) public java.lang.String android.bluetooth.BluetoothDevice.getCompany() public int android.bluetooth.BluetoothDevice.getDiscoverableTimeout() public java.lang.String android.bluetooth.BluetoothDevice.getManufacturer() public java.lang.String android.bluetooth.BluetoothDevice.getName() public int android.bluetooth.BluetoothDevice.getRemoteClass(java.lang.String) M public java.lang.String android.bluetooth.BluetoothDevice.getRemoteCompany(java.lang.String) public [B android.bluetooth.BluetoothDevice.getRemoteFeatures(java.lang.String) public java.lang.String android.bluetooth.BluetoothDevice.getRemoteManufacturer(java.lang.String) O public java.lang.String android.bluetooth.BluetoothDevice.getRemoteName(java.lang.String) public java.lang.String android.bluetooth.BluetoothDevice.getRemoteRevision(java.lang.String) C public boolean android.bluetooth.BluetoothDevice.getRemoteServiceChannel (java.lang.String,short,android.bluetooth.IBluetoothDeviceCallback) public java.lang.String android.bluetooth.BluetoothDevice.getRemoteVersion(java.lang.String) public java.lang.String android.bluetooth.BluetoothDevice.getRevision() public int android.bluetooth.BluetoothDevice.getScanMode() public java.lang.String android.bluetooth.BluetoothDevice.getVersion() public boolean android.bluetooth.BluetoothDevice.isAclConnected(java.lang.String) public boolean android.bluetooth.BluetoothDevice.isDiscovering() ... Android & Bluetooth, hacking e applicazioni
  • 11. Bluetooth API for Android 1.x • Esporta le funzionalità del BluetoothService attraverso l’uso della reflection e alcune classi di utility • Funzionalità: – accensione/spegnimento Bluetooth – modifica visibilità – inquiry di dispositivi remoti – discovery della porta RFCOMM port di un servizio – apertura connessioni RFCOMM client • Funziona senza la necessità di accesso root • Check it out! – http://code.google.com/p/android-bluetooth Android & Bluetooth, hacking e applicazioni
  • 12. Permission • Primo passo: per accedere alle funzionalità Bluetooth occorre dichiarare due Permission nel Manifest dell’applicazione: <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> Android & Bluetooth, hacking e applicazioni
  • 13. Classi • LocalBluetoothDevice – è il singleton del modulo Bluetooth locale – permette attivazione/disattivazione, discovery, pairing – notifica gli eventi attraverso l’interfaccia LocalBluetoothDeviceListener • RemoteBluetoothDevice – è un riferimento ad un device Bluetooth remoto – permette apertura/chiusura di socket RFCOMM client – notifica gli eventi attraverso l’interfaccia RemoteBluetoothDeviceListener • BluetoothSocket – rappresenta una connessione client su porta RFCOMM – fornisce InputStream e OutputStream verso il device remoto Android & Bluetooth, hacking e applicazioni
  • 14. Da rilasciare con il Device discovery metodo close() quando il contesto viene distrutto LocalBluetoothDevice local = LocalBluetoothDevice.init(context); local.setListener(new LocalBluetoothDeviceListener() { public void scanStarted() { // e’ partita la scansione... } public void scanCompleted(ArrayList<String> devices) { // scansione completata } }); local.scan(); // avvia la scansione... Android & Bluetooth, hacking e applicazioni
  • 15. Socket RFCOMM RemoteBluetoothDevice dev = local.getRemoteBluetoothDevice(address); dev.setListener(new RemoteBluetoothDeviceListener() { public void paired() { // si aprono socket e stream I/O... BluetoothSocket socket = dev.openSocket(1); InputStream input = socket.getInputStream(); 3 OutputStream output = socket.getOutputStream(); } public void pinRequested() { // mostra la dialog per l’inserimento del PIN 2 } }); dev.pair(); 1 Android & Bluetooth, hacking e applicazioni
  • 16. Device compatibili • HTC Dream • HTC Magic • HTC Tattoo • Huawei U8220 • Samsung Galaxy i7500 • Samsung Galaxy i5700 • Sony-Ericsson XPERIA X10 • Geeksphone ONE • LG LinkMe (solo discovery) Android & Bluetooth, hacking e applicazioni
  • 17. Non sono ancora Frammentazione disponibili terminali con Android 2.2 “Froyo” 1.1 1.5 1.6 2.0 2.0.1 2.1 100 80 60 40 20 0 01/2010 04/2010 1h 05/2010 2h 05/2010 Android & Bluetooth, hacking e applicazioni
  • 18. Chi la usa? • Oltre 2600 download! • Utilizzata in progetti commerciali e free: – Ha ispirato la realizzazione di Bluetooth File Transfer di Medieval Software, l’applicazione di trasferimento file di maggior successo nell’Android Market (oltre 1 milione di download) – È utilizzata in Amarino (sviluppato al MIT), primo framework di controllo di Arduino attraverso Android – È utilizzata in GoPayment di Intuit Inc., per il pagamento con carta di credito attraverso swiper e stampante BT – È utilizza in SensLink di Sensaris per la lettura dei dati rilevati dai sensori “indossabili” SensPod Android & Bluetooth, hacking e applicazioni
  • 19. Principali limitazioni • Non è possibile registrare un servizio sul database SDP (Service Discovery Protocol), benché sia possibile creare socket server RFCOMM (in sviluppo) • Se si utilizza la funzionalità di device inquiry subito dopo l’avvio del telefono, la chiamata nativa interferisce con un processo di scansione del sistema e lo stack Bluetooth diventa inutilizzabile • Problemi di compatibilità con HTC Hero e LG GW620 “LinkMe” Android & Bluetooth, hacking e applicazioni
  • 20. Permission su socket dbus Le applicazioni di terze parti non possono accedere servizio SDP Bluetooth via dbus Android & Bluetooth, hacking e applicazioni
  • 21. Nessuna novità sul L’API di Android 2.x fronte Bluetooth in Android 2.2 “Froyo” • Bluetooth ufficialmente nell'SDK! • Funzionalità: – accensione/spegnimento Bluetooth – inquiry di dispositivi remoti – apertura connessioni RFCOMM client e server • Android style: basato su Intents and Receivers • Alcune importanti limitazioni – Nessun controllo diretto sul pairing – Accesso diretto ai canali RFCOMM non consentito – Discovery dei servizi non supportato – Visibility non attivabile automaticamente da applicazione – Servizio OBEX già registrato dal sistema... Android & Bluetooth, hacking e applicazioni
  • 22. Classi • BluetoothAdapter – È il singleton che gestisce le risorse del modulo Bluetooth locale – Notifica gli eventi attraverso Broadcast Receiver • BluetoothDevice – Rappresenta il riferimento ad un device Bluetooth remoto • BluetoothSocket – Gestisce i client socket RFCOMM indirizzati attraverso record SDP – Non consente l’indirizzamento diretto ad un canale RFCOMM noto • BluetoothServerSocket – Consente la creazione di server socket • BluetoothClass – Definisce le costanti di DEVICE & SERVICE CLASS di Bluetooth Android & Bluetooth, hacking e applicazioni
  • 23. Attivazione Bluetooth • Benché l’applicazione possa attivare autonomamente il servizio Bluetooth, l’uso della via procedurale deve essere accompagnato da apposita informativa all’utente • Il sistema offre una Action (ACTION_REQUEST_ENABLE) che delega al sistema operativo l’interazione con l’utente e l’attivazione dello stack Bluetooth in caso di conferma: Intent enableBt = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBt, REQUEST_ENABLE_BT); Android & Bluetooth, hacking e applicazioni
  • 24. Visibility • Solo le utility del sistema operativo possono rendere il dispositivo visibile sulla rete Bluetooth • Per rendere visibile TEMPORANEAMENTE il terminale Android è necessario, ancora una volta, lanciare un Intent: Intent enableBt = new Intent (BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); startActivityForResult(enableBt, REQUEST_ENABLE_DISCOVERABLE); Android & Bluetooth, hacking e applicazioni
  • 25. Discovery in Android 2.x BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_DISCOVERY_STARTED); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); context.registerReceiver(receiver, filter); adapter.startDiscovery(); Android & Bluetooth, hacking e applicazioni
  • 26. Broadcast Receiver private final BroadcastReceiver receiver = new BroadcastReceiver() { public void onReceive(Context ctx, Intent intent) { final String action = intent.getAction(); if (action.equals() { // let’s show a progress dialog ;-) } else if (action.equals(BluetoothDevice.ACTION_FOUND)) { BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra (BluetoothDevice.EXTRA_DEVICE); // process device } else if (action.equals (BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) { // done } } }; Android & Bluetooth, hacking e applicazioni
  • 27. Socket e I/O Stream // dato un BluetoothDevice valido... UUID uuidOfTargetService = UUID.nameUUIDFromBytes (“2d26618601fb47c28d9f10b8ec891363”); BluetoothSocket socket = device.createRfcommSocketToServiceRecord (uuidOfTargetService); socket.connect(); InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream(); .... socket.close(); Android & Bluetooth, hacking e applicazioni
  • 28. Hacking su Android 2.x • I progettisti di Android hanno... mangiato la foglia :-) – La reflection è arginata da un più ferreo meccanismo di permission. Ad esempio, il metodo setScanMode public boolean android.bluetooth.BluetoothAdapter.setScanMode(int) esiste nella libreria standard ma non è menzionato nella documentazione ufficiale. Il tentativo di invocarlo via reflection solleva un’eccezione di sicurezza: java.lang.SecurityException: Need WRITE_SECURE_SETTINGS permission: Neither user 10097 nor current process has android.permission.WRITE_SECURE_SETTINGS. Android & Bluetooth, hacking e applicazioni
  • 29. Hacking su Android 2.x • Altri metodi hanno comportamenti imprevedibili. Ad esempio: public android.bluetooth.BluetoothSocket android.bluetooth.BluetoothDevice.createInsecureRfcommSocket(int) public android.bluetooth.BluetoothSocket android.bluetooth.BluetoothDevice.createRfcommSocket(int) consentono di aprire un RFCOMM client socket ad un canale assegnato e funzionano senza eccezioni su Motorola Milestone e Google Nexus One. Su HTC Legend, invece, il parametro intero è interpretato come UUID subclass e non come numero di canale! Crash! Android & Bluetooth, hacking e applicazioni
  • 30. DEMO Android & Bluetooth, hacking e applicazioni
  • 31. Android controlla Arduino • Utilizzando Arduino Bluetooth è possibile realizzare un termometro remoto e un semplice attuatore che accende un LED Android & Bluetooth, hacking e applicazioni
  • 32. Arduino • “Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. [...] It can sense the environment by receiving input from a variety of sensors and can affect its surroundings by controlling lights, motors, and other actuators” • Rigorosamente MADE IN ITALY! • http://www.arduino.cc Android & Bluetooth, hacking e applicazioni
  • 33. Hardware utilizzato: Sorgente Arduino • Arduino Bluetooth • Prototype shield e breadboard • LM35 Temperature Sensor int LED_PIN = 13; int LM35_PIN = 2; void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); } void loop() { if (Serial.available() > 0) { int inByte = Serial.read(); switch (inByte) { case '1': digitalWrite(LED_PIN, HIGH); Serial.write('1'); break; case '0': void readTemp() { digitalWrite(LED_PIN, LOW); int temp = analogRead(LM35_PIN); Serial.write('0'); break; temp= ( 5.0 * temp * 100.0) / 1024.0; case 'r': Serial.write(temp); readTemp(); } break; } } Android & Bluetooth, hacking e applicazioni
  • 34. Sorgente Android // definiamo i comandi... byte LED_ON_REQUEST = ‘1’; byte LED_OFF_REQUEST = ‘0’; byte READ_TEMPERATURE = ‘r’; [...] // all’interno del Thread inviamo comandi e leggiamo le risposte... output.write(request); final int response = input.read(); if (request == 'r') { handler.post(new Runnable() { public void run() { String temp = Integer.toString(response); Toast.makeText(Controller.this, "LM35 Sensor: " + temp + "°C", 4000).show(); }); } Android & Bluetooth, hacking e applicazioni
  • 35. Sensori industriali • Il supporto Bluetooth può essere utilizzato per ricevere dati da sensori wireless industriali • Nell’ambito del progetto opensource QuadraSpace, il primo prototipo di data sampler mobile è costituito da un HTC Dream (1.6) connesso ad un SensPod in grado di acquisire temperatura e umidità, ossidi di azoto (NOx) e CO2 – http://www.sensaris.com Android & Bluetooth, hacking e applicazioni
  • 36. Conclusioni • Il protocollo Bluetooth è ormai consolidato e consente l’interfacciamento a dispositivi utilizzati in numerosi domini applicativi • Pur con qualche limitazione, è possibile disporre di funzionalità base Bluetooth sia su codebase 1.x (attraverso il progetto android-bluetooth) sia su codebase 2.x (attraverso l’API ufficiale) • Sono in fase di sviluppo estensioni HDP (Heath Device Profile), eL2CAP e MCAP per l’interfacciamento a device medicali Android & Bluetooth, hacking e applicazioni
  • 37. Risorse • Android – http://developer.android.com – http://source.android.com • Bluetooth API for Android 1.x e Easy Bluetooth – http://code.google.com/p/android-bluetooth • Arduino – http://www.arduino.cc • QuadraSpace Project – http://www.quadraspace.org Android & Bluetooth, hacking e applicazioni
  • 38. GRAZIE! Stefano Sanna – Blog: http://www.gerdavax.it – email: gerdavax AT gmail DOT com – Skype: gerdavax – Twitter: @gerdavax • Ringrazio Emanuele Di Saverio che ha collaborato alla realizzazione delle versione originale di queste slide e della demo su Arduino, presentati a Java Day 2010 (Roma) Android & Bluetooth, hacking e applicazioni