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:00] enric_mieza_sanchez [Exemple] |
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 57: | Línia 132: | ||
| <WRAP todo> | <WRAP todo> | ||
| - | Implementa una app que visualitzi els valors de l' | + | Implementa una app que visualitzi els valors de l' |
| + | |||
| + | Llença l'app al teu dispositiu mòbil. | ||
| + | |||
| + | Com has de col·locar el mòbil per aconseguir aquests valors (aproximats)?: | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | Substitueix els '' | ||
| Compara amb el resultat de '' | Compara amb el resultat de '' | ||
| - | Intenta implementar | + | </ |
| + | |||
| + | <WRAP todo> | ||
| + | **Double " | ||
| + | |||
| + | Normalment parlem de //tap// o //double tap// per a interaccions de " | ||
| + | |||
| + | Implementarem | ||
| + | |||
| + | 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/ | ||
| </ | </ | ||