Autore Topic: Sensore Virtuale di stati ambientali per Android  (Letto 2141 volte)

Offline duky2003

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    LG P500
  • Sistema operativo:
    Windows xp, Ubuntu 10.10
Sensore Virtuale di stati ambientali per Android
« il: 03 Settembre 2011, 18:00:04 CEST »
+5
Ciao a tutti,
volevo presentarvi la libreria per Android che ho realizzato come lavoro di tesi.
Il sensore virtuale di stati ambientali per Android è la libreria che permette l’interrogazione degli scenari ambientali in cui un dispositivo Android può trovarsi.
Gli scenari ambientali di base per le nostre rilevazioni sono stati ricavati tramite diversi sensori tra cui l’accelerometro, il microfono e il sensore di prossimità.
Gli scenari ambientali di base sono: scenari di movimento, scenari di rumore, scenari di prossimità e scenari di modalità telefonica (ringermode).
In ognuno di questi scenari di base elencati è stato possibile rilevare degli stati interni che li caratterizzano. Gli scenari di movimento sono divisi in quattro ulteriori stati: fermo, auto, cammino e corsa. Gli scenari di rumore sono identificati dallo stato ambiente silenzioso oppure ambiente rumoroso. Inoltre gli stati di prossimità e di ringermode restituiscono rispettivamente se il dispositivo è in uno stato BOXED (tasca, o foderino) od UNBOXED, oppure in modalità silenziosa o normale. In questo lavoro di tesi sono state affrontate le tematiche riguardanti la progettazione, l’implementazione e il testing della libreria, oltre allo sviluppo di alcune applicazioni di esempio basate sulla stessa. Nella fase di progettazione sono state svolte le analisi dei dati ottenuti dai vari sensori. Quindi sono state effettuate delle scelte per l’analisi dei dati per ogni sensore, e sono stati ricavati i relativi valori soglia inseriti poi nella libreria. Analisi di particolare interesse sono state svolte sui dati restituiti dall’accelerometro, infatti tramite il calcolo della varianza sui dati delle accelerazioni raccolti, è stato possibile distinguere gli stati di fermo, auto, cammino e corsa. Le analisi e le soglie trovate sono state implementate nella libreria, che restituisce gli stati ambientali trovati in un vettore di quattro posizioni, una per ogni scenario di base. Durante la fase di implementazione sono stati rispettati criteri di semplicità e scalabilità della libreria, che permettono facilità nella comprensione del funzionamento e la possibilità di estenderla con nuovi sensori. Dopo il completamento dell’implementazione è stato effettuata una fase di testing su un campione di utenti per dimostrare la validità delle funzionalità nell’eterogeneità del mondo dei dispositivi Android. Infine la libreria è stata pubblicata con modalità open source su SourceForge.net, con il nome di Environment State Virtual Sensor for Android. Sulla base della libreria sono state create delle applicazioni di esempio.
Il pacchetto contenente i sorgenti è all'indirizzo: http://sourceforge.net/projects/environmentstat/files/LibState.zip/download
Altre informazioni sono reperibili all'indirizzo: https://sourceforge.net/projects/environmentstat/  e  EnvironmentStateVirtualSensor - ISISlab
Inoltre il codice può essere scaricato via SVN da souceforge.
Inserirò altre informazioni in questo post appena possibile...per qualsiasi informazione, o problema, contattatemi...
grazieee a tutti per l'interessamento....

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Sensore Virtuale di stati ambientali per Android
« Risposta #1 il: 03 Settembre 2011, 18:57:29 CEST »
0
Grazie per la segnalazione e soprattutto per il carattere OPEN SOURCE del progetto, un +1 da parte mia.  :-)

Quando ci fai un piccolo tutorial di un app che usa la libreria?  O:-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline duky2003

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    LG P500
  • Sistema operativo:
    Windows xp, Ubuntu 10.10
Re:Sensore Virtuale di stati ambientali per Android
« Risposta #2 il: 03 Settembre 2011, 20:50:32 CEST »
0
Grazie per il tuo +1  :-)
Ecco il tutorial con gli snippet presi dall'applicazione di test LibraryTest: http://sourceforge.net/projects/environmentstat/files/LibraryTest.apk/download
con la quale è possibile testare il funzionamento della libreria e delle sue analisi sui vari device, se qualcuno è interessato ad eseguire i test qui potete trovare una piccola guida che fà seguire degli step per eseguire la convalida: EnvironmentStateVirtualSensor - ISISlab

Il programma LibraryTest è composto da un activity che si interfaccia con un bound service il quale invoca la libreria "sensore virtuale di stati ambietali", i sorgenti scaricabili qui: http://dl.dropbox.com/u/16674955/LibraryTest.zip

Invocazione dei servizi offerti dalla libreria è composta dai seguenti passi:
1) Download del package coi sorgenti da: http://sourceforge.net/projects/environmentstat/files/LibState.zip/download oppure è possibile sincronizzare il repository con SVN ( non è ancora certo, ma probabilmente nei prossimi giorni il package coi sorgenti potrebbe essere sostituito con una progetto Android Library)
2)Creare un proprio progetto android in eclipse, e nella cartella "src" creare una cartella "org", quindi estrarre il contenuto del package
in quest'ultima appena creata.
3)Nell'activity o nel service in cui si vuole richiamare la libreria implemetare l'interfaccia StateCollection:
Codice (Java): [Seleziona]
import org.angsan.StateLib.AccelState;
import org.angsan.StateLib.StateCollection;
public class MyService extends Service implements StateCollection {
...
}
Quest'interfaccia fornisce le costanti degli stati ambientali che saranno restituite dalla libreria.

4)Quindi creare l'oggetto utilizzato nell'invocazione della libreria:
Codice (Java): [Seleziona]
public void onCreate(){
state=new AccelState(getApplicationContext());
state.start();
}

5) Dopo la creazione dell'oggetto AccelState, che si referenzia alla libreria, è possibile invocare su di esso il metodo getState() che restituisce un vettore contenente gli stati rilevati. L'invocazione di getState deve essere eseguita in modo temporizzato e threaded, cioè tramite l'utilizzo di un Timer, oppure di un thread che compia le stesse funzioni della classe Timer. Questo è dovuto al fatto che la libreria restituisce risultati validi solo dopo 2 secondi di rilevazioni.
Esempio di invocazione e ritorno degli stati ambientali, versione facilitata rispetto all'app di test LibraryTest:
Codice (Java): [Seleziona]
...
timer.schedule(new Task(),3000); //può essere dichiarato in un qualsiasi metodo oppure nell' OnCreate.
...

        class Task extends TimerTask{
                Intent i=new Intent(UPDATE_UI_ACTION);
               
                @Override
                public void run() {
                        // Receive states from library
                       int [] constants=state.getState();
                String mov="Stato: ";
                switch(constants[0]){
                case ERROR: mov+="ERROR ";break;
                case MOTIONLESS: mov+="MOTIONLESS ";break;
                case CAR: mov+="CAR ";break;
                case WALK: mov+="WALK ";break;
                case RUN: mov+="RUN ";break;
                case UN_ML_CAR: mov+="UN_ML_CAR ";break;
                case UN_CAR_WALK: mov+="UN_CAR_WALK ";break;
                case UN_WALK_RUN: mov+="UN_WALK_RUN ";break;
                default: mov+=constants[0]+" ";break;
                }
                switch(constants[1]){
                case ERROR: mov+="ERROR ";break;
                case BOXED: mov+="BOXED ";break;
                case UNBOXED: mov+="UNBOXED ";break;
                default: mov+=constants[1]+" ";break;
                }
                switch(constants[2]){
                case ERROR: mov+="ERROR ";break;
                case NOISY: mov+="NOISY ";break;
                case NOISELESS: mov+="NOISELESS ";break;
                default: mov+="UN_NOISY ";break;
                }
                switch(constants[3]){
                case ERROR: mov+="ERROR";break;
                case MODE_NORMAL: mov+="MODE_NORMAL";break;
                case MODE_SILENCED: mov+="MODE_SILENCED";break;
                       
                }
                Log.i("Sono Task", mov);
                i.putExtra("stato",mov);
                sendBroadcast(i);
}
}
Ovviamente negli switch è possibile far partire un metodo personalizzato per ogni stato ambientale utile...
Thats all :-)


Sto sviluppando inoltre un applicazione di esempio basata sulla libreria che modifica le impostazioni di telefonia in base agli scenari ambientali rilevati dalla libreria. Mancano solo poche modifiche :-)

Offline casu05

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    xperia mini pro sk17i
  • Sistema operativo:
    Ubuntu
Re:Sensore Virtuale di stati ambientali per Android
« Risposta #3 il: 20 Febbraio 2012, 11:40:35 CET »
0
salve, mi sono appena iscritto al forum e l'ho fatto perchè ho letto questo post.

Ottimo lavoro,complimenti!
Ma volevo sapere: c sono novità da settembre?

Avevo pensato anch'io a qualcosa del genere e stavo vedendo in giro cosa c fosse sull'argomento visto che in java nn sono capace di programmare qualcosa di così complesso. Io pensavo ad un'applicazione (nulla di nuovo per la verità,esistevano anche su nokia 7650) che attivasse automaticamente applicazioni o voci in impostazioni. Ad esempio: vado in macchinaa più di 10km/h? si attiva kit auto, collego l'alimentatore? si accende il wi-fi (per intenderci).

cosa mi sapreste indicare a riguardo?