Non sono necessariamente d'accordo con la risposta di Alex. Ciò è possibile (anche se forse non è accurato come si vorrebbe) utilizzando l'accelerometro, la rotazione del dispositivo e un ALTRO di prova/errore e data mining.
Il modo in cui vedo che questo può funzionare è definire un modo specifico in cui l'utente mantiene il dispositivo (o il dispositivo è bloccato e posizionato sul corpo degli utenti). Mentre attraversano i movimenti, l'orientamento combinato con l'accelerazione e il tempo determinerà quale tipo di movimento viene eseguito.Sarà necessario utilizzare oggetti di classe come OrientationEventListener, SensorEventListener, SensorManager, Sensor e vari timer, ad es. Runnables o TimerTasks.
Da lì, è necessario raccogliere molti dati. Osserva, registra e studia quali sono i numeri per eseguire azioni specifiche, quindi individua una serie di valori che definiscono ogni movimento e sottomovimento. Cosa intendo con movimenti parziali è, forse un situp ha cinque parti:
1) Posizione di riposo in cui l'orientamento telefono è valore x al tempo x
2) Situp iniziato, dove orientamento telefono è gamma di y- valori in y tempo (maggiore di x)
3) Situp è in posizione finale in cui l'orientamento telefono è gamma di valori z a z tempo (maggiore di y)
4) Situp è in estensione (l'utente sta ricadendo sul pavimento) dove l'orientamento del telefono è range di valori y al tempo v (maggiore di z)
5) Situp torna in posizione di riposo in cui l'orientamento telefono è valore x al tempo n (tempo massimo e finale)
Aggiungere accelerazione a questo pure, perché ci sono alcuni casi in cui l'accelerazione può essere assunto. Ad esempio, la mia ipotesi è che le persone eseguano il situp reale (passaggi 1-3 nella mia ripartizione sopra) con un'accelerazione più veloce rispetto a quando stanno cadendo indietro. In generale, molte persone cadono più lentamente perché non riescono a vedere cosa c'è dietro di loro. Questo può anche essere usato come condizione aggiuntiva per determinare la direzione dell'utente. Questo probabilmente non è vero per tutti i casi, tuttavia, ecco perché è necessario il data mining. Perché posso anche ipotizzare che se qualcuno ha fatto molti situp, quel situp finale è molto lento e poi si riducono di nuovo in posizione di riposo a causa dell'esaurimento. In questo caso l'accelerazione sarà opposta alla mia ipotesi iniziale.
Infine, check out sensori di movimento: http://developer.android.com/guide/topics/sensors/sensors_motion.html
Tutto sommato, è davvero un gioco di numeri in combinazione con il proprio "calcolo ipotetico". Ma potresti essere sorpreso dal modo in cui funziona. Forse (si spera) abbastanza buono per i tuoi scopi.
Buona fortuna!
@ NSQuamber.java –