Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
android_sensors [2024/01/26 17:21] enric_mieza_sanchez [Sensors de moviment d'Android] |
android_sensors [2025/01/13 18:28] (actual) enric_mieza_sanchez [Exercici] |
||
---|---|---|---|
Línia 1: | Línia 1: | ||
====== Sensors de moviment d' | ====== Sensors de moviment d' | ||
+ | |||
+ | {{ : | ||
Referències: | Referències: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | * [[Kotlin]] en aquesta wiki. | ||
- | {{tag> #Dam #DamMp08 #DamMp08Uf2 # | + | {{tag> #Dam #DamMp08 #DamMp08Uf2 # |
\\ | \\ | ||
- | ===== Exemple ===== | + | ===== Sensors ===== |
+ | Quan parlem de " | ||
+ | |||
+ | També son sensors (però no de moviment) la càmera, el micro, la pantalla tàctil i el GPS. | ||
+ | |||
+ | Si mirem la documentació oficial podrem veure que la llibreria Android disposa dels següents deteccions: | ||
+ | * Sensor.TYPE_GRAVITY | ||
+ | * Sensor.TYPE_LINEAR_ACCELERATION | ||
+ | * Sensor.TYPE_ROTATION_VECTOR | ||
+ | * Sensor.TYPE_SIGNIFICANT_MOTION | ||
+ | * Sensor.TYPE_STEP_COUNTER | ||
+ | * Sensor.TYPE_STEP_DETECTOR | ||
+ | * Sensor.TYPE_ACCELEROMETER | ||
+ | * Sensor.TYPE_GYROSCOPE | ||
+ | |||
+ | Els dos darrers son les dades "en cru" tal i com arriben dels sensors. Els altres son mecanismes de la llibreria per facilitar-nos la programació. | ||
+ | |||
+ | ===== Exemple | ||
+ | |||
+ | <tabbox Versió Kotlin> | ||
+ | |||
+ | En aquesta versió apareix la clàssica herència de '' | ||
+ | |||
+ | <file kotlin MainActivity.kt> | ||
+ | class MainActivity : AppCompatActivity(), | ||
+ | |||
+ | private lateinit var sensorManager: | ||
+ | private lateinit var accelerometre: | ||
+ | private lateinit var binding: ActivityMainBinding | ||
+ | |||
+ | override fun onCreate(savedInstanceState: | ||
+ | super.onCreate(savedInstanceState) | ||
+ | enableEdgeToEdge() | ||
+ | |||
+ | // Utilitzem bindings per facilitar accés als elements gràfics | ||
+ | // recorda activar-los a build.gradle.kts afegint: | ||
+ | // viewBinding { enable = true } | ||
+ | binding = ActivityMainBinding.inflate(layoutInflater) | ||
+ | setContentView(binding.root) | ||
+ | |||
+ | // escoltar variacions dels sensors | ||
+ | sensorManager = getSystemService( | ||
+ | Context.SENSOR_SERVICE) as SensorManager | ||
+ | accelerometre = sensorManager.getDefaultSensor( | ||
+ | Sensor.TYPE_ACCELEROMETER) as Sensor | ||
+ | sensorManager.registerListener(this, | ||
+ | SensorManager.SENSOR_DELAY_NORMAL) | ||
+ | } | ||
+ | |||
+ | override fun onSensorChanged(event: | ||
+ | // emprem les dades del sensor | ||
+ | val x = event.values[0] | ||
+ | val y = event.values[1] | ||
+ | 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 | ||
+ | binding.yProgressBar.progress | ||
+ | binding.zProgressBar.progress | ||
+ | } | ||
+ | |||
+ | override fun onAccuracyChanged(sensor: | ||
+ | // TODO(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <tabbox Versió Java> | ||
+ | |||
+ | Versió amb objecte '' | ||
<file java MainActivity.java> | <file java MainActivity.java> | ||
Línia 51: | Línia 123: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | </ | ||
+ | |||
\\ | \\ | ||
Línia 58: | Línia 133: | ||
<WRAP todo> | <WRAP todo> | ||
Implementa una app que visualitzi els valors de l' | Implementa una app que visualitzi els valors de l' | ||
- | |||
- | Compara amb el resultat de '' | ||
Llença l'app al teu dispositiu mòbil. | Llença l'app al teu dispositiu mòbil. | ||
Línia 68: | Línia 141: | ||
{{: | {{: | ||
{{: | {{: | ||
+ | |||
+ | Substitueix els '' | ||
+ | |||
+ | Compara amb el resultat de '' | ||
</ | </ | ||
<WRAP todo> | <WRAP todo> | ||
- | **Double tap** | + | **Double |
+ | |||
+ | Normalment parlem de //tap// o //double tap// per a interaccions de " | ||
+ | |||
+ | Implementarem un detector de " | ||
+ | |||
+ | Una primera aproximació podria ser **implementar un comptador de //thuds// en cadascun dels eixos XYZ**. Hauràs d' | ||
+ | |||
+ | Assegura que al canviar la orientació (portrait/ | ||
- | Intenta implementar un detector de " | ||
</ | </ | ||