FUNZIONI
Le funzioni permettono di simulare la pressione di un tasto, di invocare servizi e di avviare applicazioni sfruttando anche la API di Android.
Così come per le AZIONI, anche il codice che gestisce le funzioni deve essere racchiuso tra delle specifiche righe di codice:
codice:
( while [ 1 ]
do
GESTURE=`cat /sys/devices/virtual/misc/touch_gestures/wait_for_gesture`
e
codice:
fi;
done ) > /dev/null 2>&1 &
la selezione della funzione da eseguire avverrà tramite una select...if...then che prevede questa sintassi:
codice:
if [ "$GESTURE" == "1" ]; then
per la prima selezione, e
codice:
elif [ "$GESTURE" == "2" ]; then
per tutte le altre.
ICS e JB
Alcune funzioni necessitano di particolari parametri a seconda della versione di Android su cui vengono eseguite, soprattutto in caso di Jelly Bean. È quindi utile inserire un controllo che verifichi su quale versione del SO si sta eseguendo lo script:
codice:
case "`getprop ro.build.version.release`" in
4.1.* ) is_jb=1;;
* ) is_jb=0;;
esac
La variabile is_jb permetterà di selezionare un diverso comando in caso ce ne sia bisogno.
Pressione di un tasto
Con lo script è possibile simulare la pressione di alcuni tasti, semplicemente usando il seguente codice:
codice:
input keyevent 26
In questo casoil keyevent 26 simula la pressione del tasto power. Di seguito altri esempi di keyevent:
codice:
3 - HOME
24/25 - Volume up/down
26 - Power
84 - Search
85 - Media play/pause
86 - Media stop
87/88 - Media next/previous
164 - Toggle volume mute
187 or 214 - Recent apps
220 - Voice search
212/213 - Brightness up/down
215 - App drawer
La lista completa dei keyevent la trovate qua: KeyEvent | Android Developers.
Come alternativa all'esecuzione dei keyevent, è possibile inserire degli scan-code a cui aggiungere un ritardo che simuli la pressione a lungo del tasto. Di seguito un esempio di tasto HOME premuto a lungo:
codice:
sendevent /dev/input/event1 1 102 1
sendevent /dev/input/event1 0 0 0
usleep 500000
sendevent /dev/input/event1 1 102 0
sendevent /dev/input/event1 0 0
0
Il codice 102 è rilevato come HOME ed avrà un ritardo di 500ms tra la pressione e il rilascio.
Altri Scan-code per simulare i tasti fisici sono:
codice:
102 - Home
116 - Power
115 / 114 - Volume up / down
Invocare servizi
Ci sono alcuni servizi in esecuzione sul dispositivo, possono essere invocati utilizzando la seguente sintassi: "service call <name> <transaction> <params>".
Di seguito una breve lista di chiamate ai servizi:
chiamare un numero
codice:
service call phone 2 s16 "123456789"
Abilitare/disabilitare bluetooth:
codice:
service call bluetooth 1 | grep "0 00000000"
if [ "$?" -eq "0" ]; then
service call bluetooth 3
else
[ "$is_jb" -eq "1" ] && service call bluetooth 5
[ "$is_jb" -ne "1" ] && service call bluetooth 4
fi
Abilitare/disabilitare connessione dati:
codice:
service call connectivity 18 | grep "0 00000000"
if [ "$?" -eq "0" ]; then
service call connectivity 19 i32 1
else
service call connectivity 19 i32 0
fi
WiFi on/off:
codice:
service call wifi 14 | grep "0 00000001"
if [ "$?" -eq "0" ]; then
service call wifi 13 i32 1
else
service call wifi 13 i32 0
fi
Vibrazione:
codice:
service call vibrator 2 i32 300 i32 0
usleep 600000
service call vibrator 2 i32 300 i32 0
Expand / collapse status bar
codice:
service call statusbar 1
e
codice:
service call statusbar 2
Avvio di applicazioni
Il comando "am" può essere usato per avviare applicazioni, molto simile a ciò che accade quando le loro icone vengono premuti nel programma di avvio. Ad esempio è possibile inserire questo codice per avviare l'applicazione fotocamera:
codice:
result=`am start com.sec.android.app.camera/.Camera 2>&1 | grep Error`
[ "$result" != "" ] && result=`am start com.android.camera/.Camera 2>&1 | grep Error`
[ "$result" != "" ] && result=`am start com.android.gallery3d/com.android.camera.CameraLauncher 2>&1 | grep Error`
Feedback Tattile
Per avere anche un feedback tattile (la vibrazione) che indichi la corretta esecuzione della gesture, è sufficiente aggiungere alla funzione la chiamata al servizio vibrator, così come segue:
codice:
service call vibrator 2 i32 100 i32 0
che in questo caso sarà della durata di 100ms