English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Cet article présente un exemple de programmation Android pour l'application de l'inclinaison gravitationnelle. Partageons-le avec vous pour vous fournir une référence, voici les détails :
L'inclinaison gravitationnelle est principalement réalisée par le capteur d'accélération du téléphone (accelerometer)
Dans le développement d'Android, il y a au total huit types de capteurs, mais pas tous les appareils réels supportent nécessairement ces capteurs. Comme beaucoup de fonctionnalités ne sont pas pris en compte par les utilisateurs, les développeurs pourraient masquer certaines fonctionnalités. Il faut toujours développer en fonction de la réalité des appareils réels. Ci-dessous, nous discuterons principalement de la manière d'implémenter le capteur d'accélération, et voici les noms des capteurs :
Capteur d'accéléromètre (accelerometer)
Capteur de gyroscope
Capteur d'éclairage environnemental (light)
Capteur de champ magnétique (magnetic field)
Capteur de direction (orientation)
Capteur de pression (pressure)
Capteur de proximité (proximity)
Capteur de température (temperature)
1.
Tous les capteurs du téléphone doivent être accédés via SensorManager, en appelant la méthode getSystemService (SENSOR_SERVICE), vous pouvez obtenir l'objet de gestion des capteurs du téléphone actuel.
2.
Nous devons implémenter l'interface SensorEventListener en méthode onSensorChanged(SensorEvent event) pour capturer l'état du capteur de téléphone, obtenir les composantes de gravité des axes X, Y et Z du téléphone, avec ces données des trois directions, nous avons déjà appris le principe de la détection de gravité.
public void onSensorChanged(SensorEvent e) { float x = e.values[SensorManager.DATA_X]; float y = e.values[SensorManager.DATA_Y]; float z = e.values[SensorManager.DATA_Z]; };
comme montré dans le code suivant : float x y z 3les valeurs de la gamme de chaque direction sont-10à10。Voici une explication de la signification des composantes de gravité des axes X, Y et Z (ici, il faut noter que l'origine du repère : vers le ciel est un nombre positif, vers le sol est un nombre négatif, ce qui est exactement opposé aux coordonnées utilisées lors du codage) :
(1Le téléphone est placé vers la gauche, l'axe X pointe vers le ciel, placé verticalement, à ce moment, l'axe Y et l'axe Z n'ont pas de composante de gravité, car l'axe X pointe vers le ciel, donc sa composante de gravité est la plus grande. À ce moment, les valeurs des composantes de gravité des axes X, Y et Z sont (10,0,0);
(2Le téléphone est placé vers la droite, l'axe X pointe vers le sol, placé verticalement, à ce moment, l'axe Y et l'axe Z n'ont pas de composante de gravité, car l'axe X pointe vers le sol, donc sa composante de gravité est la plus petite. À ce moment, les valeurs des composantes de gravité des axes X, Y et Z sont (-10,0,0);
(3Le téléphone est placé en position verticale, l'axe Y pointe vers le ciel, placé verticalement, à ce moment, l'axe X et l'axe Z n'ont pas de composante de gravité, car l'axe Y pointe vers le ciel, donc sa composante de gravité est la plus grande. À ce moment, les valeurs des composantes de gravité des axes X, Y et Z sont (0,10,0);
(4Le téléphone est placé en position verticale, l'axe Y pointe vers le sol, placé verticalement, à ce moment, l'axe X et l'axe Z n'ont pas de composante de gravité, car l'axe Y pointe vers le sol, donc sa composante de gravité est la plus petite. À ce moment, les valeurs des composantes de gravité des axes X, Y et Z sont (0,-10,0);
(5Le téléphone est placé en position verticale, l'axe Z pointe vers le ciel, placé horizontalement, à ce moment, l'axe X et l'axe Y n'ont pas de composante de gravité, car l'axe Z pointe vers le ciel, donc sa composante de gravité est la plus grande. À ce moment, les valeurs des composantes de gravité des axes X, Y et Z sont (0, 0,10);
(6(-10)。
3. Register SensorEventListener
Using the SensorMannager to call the getDefaultSensor(Sensor.TYPE_ACCELEROMETER) method to obtain the Sensor object for the acceleration gravity sensing. Since I am discussing the gravity acceleration sensor, the parameter is Sensor.TYPE_ACCELEROMETER. If you need to obtain other sensors, you need to pass the corresponding name. Use SensorMannager to call the registerListener() method to register, the third parameter is the sensitivity and accuracy of detection, which should be selected according to different needs, and it is recommended to use SensorManagerSENSOR_DELAY_ GAME for game development.
4 . A simple way to calculate the speed of gravity sensing
Each time the phone is shaken, the gravitational components of the X-axis, Y-axis, and Z-axis can be calculated and recorded. Then, by comparing the gravitational components of each shake with the previous ones, the moving speed can be calculated using the difference and time.
The gravity sensing device includes three parts: sensors, processors, and controllers. Sensors are responsible for detecting the state of the memory and calculating the gravity acceleration value of the memory; processors judge whether the acceleration value is beyond the safe range; and controllers are responsible for controlling the locking or releasing of the magnetic head to or from the safe docking area. Once the sensor detects and the processor determines that the current gravity acceleration exceeds the safe value, the controller will stop the read and write work of the magnetic head through hardware control, quickly return to its original position, and lock it in the exclusive magnetic head docking area. This series of actions will200 milliseconds. When the sensing device detects that the acceleration value has returned to the normal range, the product will resume work.
The code of the Android multimedia framework is located in the following directory: external/opencore/. This directory is the root directory of the Android multimedia framework, and the subdirectories it contains are as follows:
* android: This is an upper-level library that implements a Player and Author for Android based on the PVPlayer and PVAuthor SDK
* baselibs: A lower-level library containing data structures and thread safety, etc.
* codecs_v2: This is a library with a lot of content, mainly including the implementation of codecs and an OpenMAX implementation
* engines: Implementation of PVPlayer and PVAuthor engines
*extern_libs_v2: contient les en-têtes de OpenMAX de khronos
*fileformats: classes d'analyse (parser) de formats de fichiers spécifiques
* nodes: classes de node pour le codage/décodage et l'analyse de fichiers
* oscl: bibliothèque compatible avec le système d'exploitation
* pvmi: interface abstraite de contrôle d'entrée/sortie
* protocols: principalement des contenus de protocoles liés au réseau tels que RTSP, RTP, HTTP
* pvcommon: le fichier Android.mk du fichier de bibliothèque pvcommon, sans fichiers source
*pvplayer: le fichier Android.mk du fichier de bibliothèque pvplayer, sans fichiers source
* pvauthor: le fichier Android.mk du fichier de bibliothèque pvauthor, sans fichiers source
* tools_v2: outils de compilation et certains modules enregistrables
Voici une partie du code de test :
private SensorManager sensorMgr; Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //enregistrer les coordonnées x, y, z de la dernière fois float bx = 0; float by = 0; float bz = 0; long btime = 0;//le temps cette fois-ci sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); SensorEventListener lsn = new SensorEventListener() { public void onSensorChanged(SensorEvent e) { float x = e.values[SensorManager.DATA_X]; float y = e.values[SensorManager.DATA_Y]; float z = e.values[SensorManager.DATA_Z]; //Calculer les valeurs de X, Y, Z. Ensuite, vous pouvez calculer la vitesse de bascule à partir de ces valeurs. //vitesse = distance/temps //vitesse sur l'axe X float speadX = (x - bx) / (System.currentTimeMillis() - btime); //vitesse sur l'axe Y float speadY = (y - by) / (System.currentTimeMillis() - btime); //vitesse sur l'axe Z float speadZ = (z - bz) / (System.currentTimeMillis() - btime); //Cette vitesse simple peut être calculée, si vous voulez calculer l'accélération aussi, en mécanique cinétique, l'accélération a avec la vitesse, //La distance a un rapport avec : Vt=V0+at,S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a), l'a peut être résolu en fonction de ces informations bx = x; by = y; bz = z; btime = System.currentTimeMillis(); }; public void onAccuracyChanged(Sensor s, int accuracy) { }; }; // Enregistrement du listener, le troisième paramètre est la précision de détection sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);
Les lecteurs intéressés par plus de contenu sur Android peuvent consulter les sujets spéciaux de ce site : "Introduction et tutoriel avancé de développement Android", "Résumé des techniques de vue View Android", "Résumé des techniques d'opération activity en programmation Android", "Résumé des techniques d'opération de base de données SQLite Android", "Résumé des techniques d'opération de données JSON Android", "Résumé des techniques d'opération de base de données Android", "Résumé des techniques de manipulation de fichiers Android", "Résumé des méthodes de manipulation de la carte SD Android", "Résumé des techniques de manipulation des ressources Android" et "Résumé des utilisations des contrôles Android"
J'espère que les informations de cet article vous seront utiles pour la conception de programmes Android.
Déclaration : Le contenu de cet article est issu du réseau, et les droits d'auteur appartiennent aux auteurs respectifs. Le contenu est apporté par les utilisateurs d'Internet et téléchargé spontanément. Ce site ne détient pas de droits de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)