bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


android_sensors

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
android_sensors [2024/12/25 20:57]
enric_mieza_sanchez [Exemple amb dades de l'acceleròmetre]
android_sensors [2025/01/13 18:28] (actual)
enric_mieza_sanchez [Exercici]
Línia 6: Línia 6:
   * [[https://developer.android.com/develop/sensors-and-location/sensors/sensors_motion|Doc oficial: sensors de moviment en Android]].   * [[https://developer.android.com/develop/sensors-and-location/sensors/sensors_motion|Doc oficial: sensors de moviment en Android]].
   * [[https://stackoverflow.com/questions/5271448/how-to-detect-shake-event-with-android|Com detectar sacsejos amb l'acceleròmetre]].   * [[https://stackoverflow.com/questions/5271448/how-to-detect-shake-event-with-android|Com detectar sacsejos amb l'acceleròmetre]].
 +  * [[Kotlin]] en aquesta wiki.
  
-{{tag> #Dam #DamMp08 #DamMp08Uf2 #DamMp08Uf02 Android mobile java sensors acceleròmetre accelerometer }}+{{tag> #Dam #DamMp08 #DamMp08Uf2 #DamMp08Uf02 Android mobile java kotlin sensors acceleròmetre accelerometer }}
  
 \\ \\
Línia 31: Línia 32:
  
 <tabbox Versió Kotlin> <tabbox Versió Kotlin>
 +
 +En aquesta versió apareix la clàssica herència de ''AppCompatActivity'' però alhora s'aplica la //interface// ''SensorEventListener'', fet que ens obligarà a implementar els mètodes ''onSensorChanged'' i ''onAccuracyChanged'':
  
 <file kotlin MainActivity.kt> <file kotlin MainActivity.kt>
Línia 36: Línia 39:
  
     private lateinit var sensorManager: SensorManager     private lateinit var sensorManager: SensorManager
-    private lateinit var accel: Sensor+    private lateinit var accelerometre: Sensor
     private lateinit var binding: ActivityMainBinding     private lateinit var binding: ActivityMainBinding
  
Línia 63: Línia 66:
         val y = event.values[1]         val y = event.values[1]
         val z = event.values[2]         val z = event.values[2]
 +        // 1g = 9,8 m/s² , què és un valor força alt.
 +        // Al fer *10 ens acostem als 100, que és el valor màxim per defecte de la ProgressBar
         binding.xProgressBar.progress = abs(x*10.0).toInt()         binding.xProgressBar.progress = abs(x*10.0).toInt()
         binding.yProgressBar.progress = abs(y*10.0).toInt()         binding.yProgressBar.progress = abs(y*10.0).toInt()
Línia 75: Línia 80:
  
 <tabbox Versió Java> <tabbox Versió Java>
 +
 +Versió amb objecte ''SensorEventListener'' que encapsula les //callbacks// ''onSensorChanged'' i ''onAccuracyChanged'':
  
 <file java MainActivity.java> <file java MainActivity.java>
Línia 126: Línia 133:
 <WRAP todo> <WRAP todo>
 Implementa una app que visualitzi els valors de l'acceleròmetre seguint l'exemple anterior on emprem el ''Sensor.TYPE_ACCELEROMETER''. Tens unes captures de pantalla més a baix de com pots fer la app. Implementa una app que visualitzi els valors de l'acceleròmetre seguint l'exemple anterior on emprem el ''Sensor.TYPE_ACCELEROMETER''. Tens unes captures de pantalla més a baix de com pots fer la app.
- 
-Compara amb el resultat de ''Sensor.TYPE_LINEAR_ACCELERATION''. Quina diferència veus? 
  
 Llença l'app al teu dispositiu mòbil. Llença l'app al teu dispositiu mòbil.
Línia 136: Línia 141:
 {{:android:tapapp2.jpg?150}} {{:android:tapapp2.jpg?150}}
 {{:android:tapapp3.jpg?150}} {{:android:tapapp3.jpg?150}}
 +
 +Substitueix els ''TextView'' amb número per una ''ProgressBar'', i mostra-ho en valor absolut (si no, els valors negatius no es visualitzaran).
 +
 +Compara amb el resultat de ''Sensor.TYPE_LINEAR_ACCELERATION''. Quina diferència veus?
  
 </WRAP> </WRAP>
  
 <WRAP todo> <WRAP todo>
-**Double tap**+**Double "thud"** 
 + 
 +Normalment parlem de //tap// o //double tap// per a interaccions de "toc" de la pantalla. Aquest exercici vol detectar "tocs" però no de pantalla, sinó "tocs" a qualsevol part del mòbil. Per això en direm //thud// enlloc de //tap// (consultant un [[https://www.thesaurus.com/browse/tap|sinònim de "tap"]]). 
 + 
 +Implementarem un detector de "double thud". No ha de reaccionar amb 1 sol "thud" ni tampoc si ens desplacem ràpid o fem una sacsejada del mòbil. 
 + 
 +Una primera aproximació podria ser **implementar un comptador de //thuds// en cadascun dels eixos XYZ**. Hauràs d'establir un **llindar d'acceleració** a partir del qual consideres que ha succeït un "thud". Defineix el llindar en una constant de l'aplicació (fàcilment localitzable i ajustable). 
 + 
 +Assegura que al canviar la orientació (portrait/landscape) no es reinicien els comptadors a zero (un canvi d'orientació reconstrueix l'objecte Activity de nou). El mètode més directe és [[https://developer.android.com/guide/components/activities/activity-lifecycle#saras|implementar onSaveInstanceState de la Activity Lifecycle]].
  
-Intenta implementar un detector de "double tap". No ha de reaccionar amb 1 sol "tap" ni tampoc si ens desplacem ràpid o fem una sola sacsejada del mòbil. 
 </WRAP> </WRAP>
  
android_sensors.1735160257.txt.gz · Darrera modificació: 2024/12/25 20:57 per enric_mieza_sanchez