Presentata a Java Day 2010 ROMA.
Bluetooth e' la tecnologia di wireless piu' utilizzata per l'interfacciamento a corto raggio tra device mobili. Android 1.x non offre agli sviluppatori la possibilita' di accedere allo stack Bluetooth e anche la versione 2.0 del sistema operativo pone alcune limitazioni rispetto alle potenzialita' della piattaforma. Questo talk descrive la tecnica per accedere a tutte le funzionalita', oltre ad una descrizione delle nuove feature di Android 2.0 e una demo con Arduino Bluetooth.
Android & Bluetooth: hacking e applicazioniStefano Sanna
Uso di Bluetooth su Android 1.x e Android 2.x, con demo basata su Arduino Bluetooth e SensPod. Talk presentato alla conferenza whymca 2010 (http://www.whymca.org).
Arduino e' una piattaforma hardware/software rilasciata sotto licenza Creative Commons che permette la realizzazione oggetti fisici interattivi, in grado di utilizzare un ricco insieme di sensori e attuatori. Il seminario illustra come creare una piccola stazione di rilevamento di dati ambientali basata su Linux e accessibile via web.
I nuovi modelli di business developer centered: un`analisi giuridica.Elvira.Berlingieri
Slide del talk che ho presentato a Bettersoftware2010 il 5 maggio 2010 dal titolo: "I nuovi modelli di business developer centered: un`analisi giuridica."
Android & Bluetooth: hacking e applicazioniStefano Sanna
Uso di Bluetooth su Android 1.x e Android 2.x, con demo basata su Arduino Bluetooth e SensPod. Talk presentato alla conferenza whymca 2010 (http://www.whymca.org).
Arduino e' una piattaforma hardware/software rilasciata sotto licenza Creative Commons che permette la realizzazione oggetti fisici interattivi, in grado di utilizzare un ricco insieme di sensori e attuatori. Il seminario illustra come creare una piccola stazione di rilevamento di dati ambientali basata su Linux e accessibile via web.
I nuovi modelli di business developer centered: un`analisi giuridica.Elvira.Berlingieri
Slide del talk che ho presentato a Bettersoftware2010 il 5 maggio 2010 dal titolo: "I nuovi modelli di business developer centered: un`analisi giuridica."
Android è la piattaforma aperta di mobile computing sviluppata dalla Open Handset Alliance e sostenuta da Google. Basata su Linux e dotato di un ambiente Java ottimizzato e una ricca libreria di classi, Android si candida per essere l'ambiente applicativo ideale per la telefonia cellulare. Dopo aver illustrato l'architettura del framework e l'IDE di sviluppo, vedremo la realizzazione di una applicazione Java, sfruttando le librerie di Android e testandola sull'emulatore e su un terminale HTC G1. Si vedra' come realizzare una user interface, conoscere e utilizzare le semplici ma potenti funzionalità disponibili. In chiusura si fara' un confronto critico tra Android, iPhone e Java ME.
2.5 tiers is the name of this simple and powerful architecture, based on jquery and RESTful services. In this talk we'll learn how to apply 2.5 tiers in our projects
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...Andrea Cartotto
Il mio intervento in occasione del Webinar del 4 maggio 2020, organizzato da LibreItalia e PA Social, in cui ho dialogato (come membro di LibreItalia e The Document Foundation) con Giordano Alborghetti sul tema della cittadinanza digitale e della privacy, rapportati all'uso del software libero. Saluti istituzionali del Presidente di LibreItalia Enio Gemmo e del Presidente di PA Social Francesco Di Costanzo.
Internet of Things - Cos'è e cosa ci posso fare?Fulvio Corno
Seminario introduttivo sull'Internet of Things, rivolto a studenti delle scuole tecniche secondarie nell'ambito dei programmi di alternanza scuola-lavoro. Organizzato a cura di Forte Chance Torino.
Freedomotic pitch 12.05.16 Smart Home Now Milanofreedomotic
Presentazione del framework allo Smart Home Now di Milano, l’incontro che riunisce tutti i player della Smart Home: produttori, fornitori di servizi e professionisti in campo per progettare insieme nuove opportunità di business.
FODD 2015 Mobile App based on ServiceMap, http://www.disit.org/foddPaolo Nesi
FODD, Florence Open Data Day
Salone de’ Dugento, Palazzo Vecchio, Firenze
21/02/2015, http://www.disit.org/fodd
Ing. Ph.D Ivan Bruno
Obiettivo
Utilizzare i servizi (API REST) esposti da servicemap.disit.org
Visualizzare informazioni tempo reale / dinamiche
Realizzare un app per l’evento
Non solo una demo ma un’app estendibile e modificabile
Semplificazione
Menu configurabile
Gestione viste: una logica di gestione delle viste statiche e di quelle dinamiche da costruire a runtime sui dati JSON provenienti dalle chiamate REST via AJAX
Semplificare la gestione delle viste costruite sui dati JSON utilizzando soluzioni template-based
Rilevazione stato connessione internet del dispositivo
Notifica di anomalie (connessione assente, errori di connessioni al server....)
Portabilità su diversi dispositivi mobili
NFC (Near Field Communication - Comunicazione di prossimità)Luca Santoro
Breve presentazione sulla tecnologia NFC e il suo utilizzo e confronto con tecnologie similari facendo sottolineando i diversi campi di applicazione. Utile per molteplici attività quali pagamento, identificazione, domotica, marketing di prossimità, servizi avanzati per i clienti.
Building brain - infoFACTORY - home and building automation - smart citiesPaolo Omero
Building Brain is an open source software platform demonstrator which allows to integrate heterogeneous domotics technologies and to encourage the development of brand new applications in this field.
Building Brain is the result of an applied research project carried out by AREA Science Park, Udine Artificial Intelligence Lab and infoFACTORY srl.
Codice iPhone lavato a caldo: come "restringere" la tua app per Apple WatchCodemotion
"Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch" by Francesco Ingrassia, Marco Passariello, Salvatore Ferranti
Il supporto ad Apple Watch rappresenta per lo sviluppatore iPhone un crocevia fondamentale per emergere dalla massa, nonché una sfida per i designer di tutto il mondo che devono rivoluzionare il modo con cui l'utente interagisce. Partendo da un'app iPhone di esempio avremo modo di toccare con mano quali sono gli approcci comuni ad iOS, le novità e le principali problematiche che il programmatore deve affrontare nello sviluppo di app per Apple Watch.
Android Code Camp for Beginners - Ecosistema Android (IT)Alessandro Bogliolo
Slides introduttive presentate nell'ambito dell'Android Code Camp for Beginners organizzato dall'Universita' di Urbino e da NeuNet il 28/11/2013
http://informatica.uniurb.it/android-code-camp-beginners/
Android Things, from mobile apps to physical worldStefano Sanna
Presented at CODEMOTION 2018 - Rome.
The large and vibrant community of Android developers can now leverage all the libraries, services and knowledge to move from mobile towards the IoT world. The key for success is that even the existing code could be shared in the same project to target mobile, wearables and now embedded boards. This talk will explain what Android Things is and many of its features, giving some practical example on how to integrate code for mobile platform.
Android è la piattaforma aperta di mobile computing sviluppata dalla Open Handset Alliance e sostenuta da Google. Basata su Linux e dotato di un ambiente Java ottimizzato e una ricca libreria di classi, Android si candida per essere l'ambiente applicativo ideale per la telefonia cellulare. Dopo aver illustrato l'architettura del framework e l'IDE di sviluppo, vedremo la realizzazione di una applicazione Java, sfruttando le librerie di Android e testandola sull'emulatore e su un terminale HTC G1. Si vedra' come realizzare una user interface, conoscere e utilizzare le semplici ma potenti funzionalità disponibili. In chiusura si fara' un confronto critico tra Android, iPhone e Java ME.
2.5 tiers is the name of this simple and powerful architecture, based on jquery and RESTful services. In this talk we'll learn how to apply 2.5 tiers in our projects
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...Andrea Cartotto
Il mio intervento in occasione del Webinar del 4 maggio 2020, organizzato da LibreItalia e PA Social, in cui ho dialogato (come membro di LibreItalia e The Document Foundation) con Giordano Alborghetti sul tema della cittadinanza digitale e della privacy, rapportati all'uso del software libero. Saluti istituzionali del Presidente di LibreItalia Enio Gemmo e del Presidente di PA Social Francesco Di Costanzo.
Internet of Things - Cos'è e cosa ci posso fare?Fulvio Corno
Seminario introduttivo sull'Internet of Things, rivolto a studenti delle scuole tecniche secondarie nell'ambito dei programmi di alternanza scuola-lavoro. Organizzato a cura di Forte Chance Torino.
Freedomotic pitch 12.05.16 Smart Home Now Milanofreedomotic
Presentazione del framework allo Smart Home Now di Milano, l’incontro che riunisce tutti i player della Smart Home: produttori, fornitori di servizi e professionisti in campo per progettare insieme nuove opportunità di business.
FODD 2015 Mobile App based on ServiceMap, http://www.disit.org/foddPaolo Nesi
FODD, Florence Open Data Day
Salone de’ Dugento, Palazzo Vecchio, Firenze
21/02/2015, http://www.disit.org/fodd
Ing. Ph.D Ivan Bruno
Obiettivo
Utilizzare i servizi (API REST) esposti da servicemap.disit.org
Visualizzare informazioni tempo reale / dinamiche
Realizzare un app per l’evento
Non solo una demo ma un’app estendibile e modificabile
Semplificazione
Menu configurabile
Gestione viste: una logica di gestione delle viste statiche e di quelle dinamiche da costruire a runtime sui dati JSON provenienti dalle chiamate REST via AJAX
Semplificare la gestione delle viste costruite sui dati JSON utilizzando soluzioni template-based
Rilevazione stato connessione internet del dispositivo
Notifica di anomalie (connessione assente, errori di connessioni al server....)
Portabilità su diversi dispositivi mobili
NFC (Near Field Communication - Comunicazione di prossimità)Luca Santoro
Breve presentazione sulla tecnologia NFC e il suo utilizzo e confronto con tecnologie similari facendo sottolineando i diversi campi di applicazione. Utile per molteplici attività quali pagamento, identificazione, domotica, marketing di prossimità, servizi avanzati per i clienti.
Building brain - infoFACTORY - home and building automation - smart citiesPaolo Omero
Building Brain is an open source software platform demonstrator which allows to integrate heterogeneous domotics technologies and to encourage the development of brand new applications in this field.
Building Brain is the result of an applied research project carried out by AREA Science Park, Udine Artificial Intelligence Lab and infoFACTORY srl.
Codice iPhone lavato a caldo: come "restringere" la tua app per Apple WatchCodemotion
"Codice iPhone lavato a caldo: come "restringere" la tua app per Apple Watch" by Francesco Ingrassia, Marco Passariello, Salvatore Ferranti
Il supporto ad Apple Watch rappresenta per lo sviluppatore iPhone un crocevia fondamentale per emergere dalla massa, nonché una sfida per i designer di tutto il mondo che devono rivoluzionare il modo con cui l'utente interagisce. Partendo da un'app iPhone di esempio avremo modo di toccare con mano quali sono gli approcci comuni ad iOS, le novità e le principali problematiche che il programmatore deve affrontare nello sviluppo di app per Apple Watch.
Android Code Camp for Beginners - Ecosistema Android (IT)Alessandro Bogliolo
Slides introduttive presentate nell'ambito dell'Android Code Camp for Beginners organizzato dall'Universita' di Urbino e da NeuNet il 28/11/2013
http://informatica.uniurb.it/android-code-camp-beginners/
Android Things, from mobile apps to physical worldStefano Sanna
Presented at CODEMOTION 2018 - Rome.
The large and vibrant community of Android developers can now leverage all the libraries, services and knowledge to move from mobile towards the IoT world. The key for success is that even the existing code could be shared in the same project to target mobile, wearables and now embedded boards. This talk will explain what Android Things is and many of its features, giving some practical example on how to integrate code for mobile platform.
Smartphones, tablets, TVs, cars and smartwatches: Android is everywhere enabling users and developers with rich set of applications, libraries and services. Android Things brings such a power to virtually any object, any “thing”: using a low-cost (yet powerful) board, developer can add intelligence and connectivity to home, industries, vehicles and even medical appliances. This presentation introduces practical concepts around the Android Things platform and how to have fun with it.
Queste slide introducono la tecnologia iBeacon, partendo dai fondamenti di Bluetooth Low Energy, con un approfondimento sull'implementazione di un beacon scanner su Android. Presentate a Codemotion 2015 ROMA.
While augmented-reality aims to enrich reality with data coming from the phone, the rich set of interfaces and sensor the equips modern device open new possibilities to enhance user experience automating tedious processes, bringing security and new business opportunities. The talk shows how to use latest Location API, Bluetooth classic and Bluetooth Low Energy and other technologies to empower user experience on real world.
Mentre l’IoT porta sempre più oggetti sulla rete globale, Bluetooth Low Energy (BLE), porta l’interazione tra smartphone e oggetti fisici ad un nuovo livello di pervasività. “Magico” come Bluetooth, “prossimo” come NFC, “fisico” come l’ambiente che ci circonda, BLE facilita e incoraggia l’interfacciamento a basso costo con qualsiasi oggetto e riapre (finalmente) il dominio dei wearable e dell’indoor-navigation, garantendo bassi consumi e lunga autonomia.
Conquistato il mercato degli smartphone e avviato l'attacco al mondo dei tablet, Android si appresta a diventare protagonista del display più grande e più diffuso: la televisione. La piattaforma Google TV, recentemente aggiornata nel software e nell'hardware, rappresenta un'evoluzione importantissima e allo stesso tempo estremamente accessibile per gli sviluppatori Android: senza neppure una API aggiuntiva, il sistema operativo consente di scrivere app perfettamente adattate alla nuova UI e ai nuovi controller. Il talk presenta la piattaforma, il set-top box Sony e un'app dimostrativa.
Guest seminar del corso "Applicazioni per dispositivi mobili" tenuto presso l'Università degli Studi dell'Aquila. Giugno 2012. Il seminario introduce i concetti fondamentali della tecnologia NFC e mostra l'utilizzo della modalità reader/writer in ambiente Android.
1. Bluetooth Hacking
Stefano Sanna - JUG Sardegna
Emanuele Di Saverio - JUG Roma
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
2. Sommario
• Chi siamo
• L’importanza del Bluetooth sui device mobili
• Android & Bluetooth: storia di un amore mancato
• Happy hacking!
• La Bluetooth API per Android 1.x
• L’API ufficiale di Android 2.0
• Demo: Android per controllare Arduino Bluetooth
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
3. Chi siamo
• Stefano Sanna
• Senior Solution Engineer Android @ beeweeb SpA
• Autore del libro “Java Micro Edition”, Hoepli (2007)
• Main designer Bluetooth API for Android 1.x
• Emanuele Di Saverio
• Scrum Master and Senior Developer @ beeweeb SpA
• SCMAD, SCJP
• Committer Easy-Bluetooth framework for Android
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
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
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
5. L’importanza del supporto 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...)
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
6. Tanti device la’ fuori...
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
7. Happy
Hacking!
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
8. 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();
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
9. I metodi disponibili
O !
public android.bluetooth.BluetoothDevice(android.bluetooth.IBluetoothDevice)
P O
public boolean android.bluetooth.BluetoothDevice.cancelBondProcess(java.lang.String)
public void android.bluetooth.BluetoothDevice.cancelDiscovery()
P S
public boolean android.bluetooth.BluetoothDevice.cancelPin(java.lang.String)
public boolean android.bluetooth.BluetoothDevice.createBond(java.lang.String)
public boolean android.bluetooth.BluetoothDevice.disable()
O ES
public boolean android.bluetooth.BluetoothDevice.disconnectRemoteDeviceAcl(java.lang.String)
public boolean android.bluetooth.BluetoothDevice.enable()
R L
public java.lang.String android.bluetooth.BluetoothDevice.getAddress()
public int android.bluetooth.BluetoothDevice.getBluetoothState()
T P
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()
M
public int android.bluetooth.BluetoothDevice.getRemoteClass(java.lang.String)
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteCompany(java.lang.String)
public [B android.bluetooth.BluetoothDevice.getRemoteFeatures(java.lang.String)
O
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteManufacturer(java.lang.String)
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteName(java.lang.String)
C
public java.lang.String android.bluetooth.BluetoothDevice.getRemoteRevision(java.lang.String)
public boolean
android.bluetooth.BluetoothDevice.getRemoteServiceChannel(java.lang.String,short,android.bluetoot
h.IBluetoothDeviceCallback)
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
10. Permission
• Primo passo: per accedere alle funzionalità Bluetooth
occorre dichiarare due Permission nel Manifest:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
11. Discovery device remoti
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...
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
12. Apertura di un socket RFCOMM client
RemoteBluetoothDevice dev = local.getRemoteBluetoothDevice(address);
dev.setListener(new RemoteBluetoothDeviceListener() {
public void paired() {
// si aprono socket e stream I/O... 3
BluetoothSocket socket = dev.openSocket(1);
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();
}
public void pinRequested() {
// mostra la dialog per l’inserimento del PIN 2
}
});
dev.pair(); 1
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
13. Device compatibili
• HTC Dream
• HTC Magic
• HTC Tattoo
• Samsung Galaxy i7500
• Samsung Galaxy i5700
• Huawei U8220
• Sony-Ericsson XPERIA X10
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
14. Bluetooth API for Android 1.x
• Unica libreria opensource (Apache 2.0) che per
l’accesso allo stack Bluetooth su Android 1.x
• Funzionalità:
• accensione/spegnimento Bluetooth
• discovery di dispositivi remoti e 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
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
15. Bluetooth API for Android 1.x
• Oltre 1000 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
• È 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
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
16. Principali limitazioni
• Non è possibile registrare un servizio sul database
SDP (Service Discovery Protocol), benché sia
possibile creare socket server RFCOMM
• 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
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
17. Permission su socket dbus
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
18. L’API di Android 2.x
• Android 2.0 : Bluetooth ufficialmente nell'SDK!
• Yay!
• Niente controllo diretto sul pairing
• Niente accesso diretto ai canali RFCOMM
• Niente discovery dei servizi
...not so :
• Android style: basato su Intents and Receivers
• paradigma Publish/Subscribe, un po’ macchinoso!
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
19. Discovery in Android 2.x
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
//also can register for DISCOVERY_STARTED Action
context.registerReceiver(receiver, filter);
adapter.startDiscovery();
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
20. BroadcastReceiver
private final BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context ctx, Intent intent) {
final String action = intent.getAction();
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 :o)
}
}
};
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
21. Socket e stream I/O
//given a valid “BluetoothDevice”...
UUID uuidOfTargetService =
UUID.nameUUIDFromBytes(“2d26618601fb47c28d9f10b8ec891363”);
BluetoothSocket socket =
rbd.createRfcommSocketToServiceRecord(uuidOfTargetService);
socket.connect();
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();
....
socket.close();
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
22. Buone pratiche su Android
• È importante tenere a mente le buone usanze di
programmazione Android (e Java!):
• operazioni di I/O sempre su un Thread separato
• aggiornare la UI via Handler
• deregistrare i Receivers prima di terminare un Context
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
23. Serve ancora una libreria custom?
• Malgrado l’API di Android 2.0, una libreria Bluetooth
avrebbe ancora la sua utilità!
• Accesso alle feature nascoste (via reflection)
• Esposizione di una API più semplice
• Astrazione 1.x vs 2.0 Retrocompatibilità!
• ....in lavorazione Easy Bluetooth
• Check it out:
http://android-bluetooth.googlecode.com/svn/
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
24. Android controlla Arduino
• Vogliamo utilizzare Android per
controllare via Bluetooth un LED e
leggere una temperatura
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
25. 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
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
26. Sorgente Arduino
int LED_PIN = 13; int LM35_PIN = 2;
void setup() { Hardware utilizzato:
Serial.begin(115200);
}
pinMode(LED_PIN, OUTPUT);
• Arduino Bluetooth
• Prototype shield e breadboard
void loop() { • LM35 Temperature Sensor
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'); temp= ( 5.0 * temp * 100.0) / 1024.0;
break; Serial.write(temp);
case 'r':
}
readTemp();
break;
}
}
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
27. 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();
});
}
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
28. DEMO!
Starring:
Motorola Milestone (Android 2.0), HTC Magic (Android 1.6) and Arduino Bluetooth
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
29. 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
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
30. Riferimenti
• Stefano Sanna
• gerdavax AT gmail DOT com
• http://www.gerdavax.it
• Emanuele Di Saverio
• emanuele DOT disaverio AT gmail DOT com
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010
31. GRAZIE!
Stefano & Emanuele & i rispettivi JUG!
Stefano Sanna & Emanuele di Saverio – JUG Sardegna / JUG Roma
Javaday IV – Roma – 30 gennaio 2010