English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Analyse der Methode der Anwendung von Gravitationseffekten in der Android-Programmierung

Dieser Artikel beschreibt ein Beispiel für die Anwendung der Erdanziehungskraft in der Android-Programmierung. Hiermit möchte ich etwas teilen, das für alle zur Verfügung stehen kann, genauer gesagt:

Die Erdanziehungskraft wird hauptsächlich durch den Beschleunigungssensor (accelerometer) des Handys realisiert

Im Android-Entwicklung gibt es insgesamt acht Sensoren, aber nicht jedes physische Gerät unterstützt diese Sensoren unbedingt. Da viele Funktionen für die Benutzer irrelevant sind, könnte der Entwickler bestimmte Funktionen sperren. Es ist notwendig, die tatsächliche Situation des physischen Geräts zu berücksichtigen, wenn entwickelt wird. Nachfolgend wird hauptsächlich die spezifische Implementierung des Beschleunigungssensors diskutiert, und die Namen der Sensoren sind wie folgt:

Beschleunigungssensors (accelerometer)
Gyroskopsensor (gyroscope)
Umgebungslichtsensor (light)
Magnetfeldsensor (magnetic field)
Orientierungssensor (orientation)
Drucksensor (pressure)
Distanzsensor (proximity)
Temperatursensor (temperature)

1.SensorManager-Sensormanagementobjekt

Alle Sensoren im Handy müssen über SensorManager erreicht werden, indem das Systemdienst getSystemService (SENSOR_SERVICE) aufgerufen wird, um das aktuelle Sensor-Management-Objekt des Handys zu erhalten.

2.Implementierung des Interfaces SensorEventListener

Wir müssen das Interface SensorEventListener die Methode onSensorChanged(SensorEvent event) implementieren, um den Zustand des Handy-Sensors zu erfassen, die X-, Y- und Z-Komponenten der Gewichtskomponenten des Handys zu erhalten. Mit diesen Daten haben wir das Prinzip der Gravitationssensorik bereits gelernt.

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];
};

wie im obigen Code gezeigt: float x y z 3in der Reichweite der Werte ist-10bis10zwischen. Nachfolgend erkläre ich die Bedeutung der Gewichtskomponenten der X-Achse, Y-Achse und Z-Achse (hier ist zu beachten, dass der Koordinatenursprung: nach Himmel ist positiv, nach Boden ist negativ, was dem Koordinatenssystem beim Programmieren entgegengesetzt ist):

(1)Handydisplay nach linker Seite, die X-Achse zeigt nach Himmel, senkrecht positioniert, in diesem Fall haben die Y-Achse und Z-Achse keine Gewichtskomponenten, da die X-Achse nach Himmel zeigt, ist ihre Gewichtskomponente am größten. In diesem Moment sind die Werte der Gewichtskomponenten der X-Achse, Y-Achse und Z-Achse (10,0,0);

(2)Handydisplay nach rechter Seite, die X-Achse zeigt nach Boden, senkrecht positioniert, in diesem Fall haben die Y-Achse und Z-Achse keine Gewichtskomponenten, da die X-Achse nach Boden zeigt, ist ihre Gewichtskomponente am kleinsten. In diesem Moment sind die Werte der Gewichtskomponenten der X-Achse, Y-Achse und Z-Achse (-10,0,0);

(3)Handydisplay senkrecht aufgestellt, die Y-Achse zeigt nach Himmel, senkrecht positioniert, in diesem Fall haben die X-Achse und Z-Achse keine Gewichtskomponenten, da die Y-Achse nach Himmel zeigt, ist ihre Gewichtskomponente am größten. In diesem Moment sind die Werte der Gewichtskomponenten der X-Achse, Y-Achse und Z-Achse (0,10,0);

(4)Handydisplay senkrecht aufgestellt, die Y-Achse zeigt nach Boden, senkrecht positioniert, in diesem Fall haben die X-Achse und Z-Achse keine Gewichtskomponenten, da die Y-Achse nach Boden zeigt, ist ihre Gewichtskomponente am kleinsten. In diesem Moment sind die Werte der Gewichtskomponenten der X-Achse, Y-Achse und Z-Achse (0,-10,0);

(5)Handydisplay nach oben, der Z-Achse zeigt nach Himmel, horizontal positioniert, in diesem Fall haben die X-Achse und Y-Achse keine Gewichtskomponenten, da die Z-Achse nach Himmel zeigt, ist ihre Gewichtskomponente am größten. In diesem Moment sind die Werte der Gewichtskomponenten der X-Achse, Y-Achse und Z-Achse (0, 0,10);

(6)(The phone screen is upward, the Z-axis points to the ground, placed horizontally, at this time, the X-axis and Y-axis have no gravity components, because the Z-axis points to the ground, so its gravity component is the smallest. At this time, the values of the gravity components of the X-axis, Y-axis, and Z-axis are (0, 0,-10)

3. Register SensorEventListener

Use 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 in the corresponding name. Use SensorMannager to call the registerListener() method to register, the third parameter is the sensitivity and accuracy of the detection, choose the accuracy according to different needs, and it is recommended to use SensorManagerSENSOR_DELAY_GAME for game development.

4 . The way to calculate the simple speed of gravity sensing

Each time the phone is shaken, the gravity components of the X-axis, Y-axis, and Z-axis can be calculated and recorded. Then, by comparing the gravity components of each shake with the previous ones, the speed of their movement can be calculated using the difference and time.

The gravity sensing device includes three parts: sensors, processors, and controllers. The sensor is responsible for detecting the status of the storage, calculating the gravity acceleration value of the storage; the processor judges whether the acceleration value exceeds the safe range; and the controller is responsible for controlling whether the head is locked or released 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 head through hardware control, and quickly return to the designated head docking area. This series of actions will200 milliseconds. The product will only resume work after the sensing device detects that the acceleration value has returned to the normal range.

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: Include the underlying library containing data structures and thread safety
* codecs_v2: This is a library with a lot of content, mainly including the implementation of codecs and an OpenMAX implementation
* Engines: Include the implementation of PVPlayer and PVAuthor engines
*extern_libs_v2: Enthält Headerdateien von Khronos OpenMAX
*fileformats: Specific parser (parser) Klassen für Dateiformate
* nodes: verschiedene Node-Klassen für Decodierung und Datei-Parser
* oscl: Bibliothek für Betriebssystemkompatibilität
* pvmi: Abstrakter Interface für Eingabe-/Ausgabekontrolle
* protocols: Hauptsächlich Inhalte der mit dem Netzwerk verbundenen Protokolle wie RTSP, RTP, HTTP
* pvcommon: Das Android.mk-Datei der pvcommon-Bibliothek, keine Quelldateien
*pvplayer: Das Android.mk-Datei der pvplayer-Bibliothek, keine Quelldateien
* pvauthor: Das Android.mk-Datei der pvauthor-Bibliothek, keine Quelldateien
* tools_v2: Compilerwerkzeuge und einige registrierbare Module

Nachstehend finden Sie einen Teil der Testcodes:

private SensorManager sensorMgr;
Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//Speichern der Koordinaten von x, y und z aus dem letzten Mal
float bx = 0;
float by = 0;
float bz = 0;
long btime = 0;//Diese Zeit
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];
    //Die Werte von X, Y und Z können berechnet werden. Basierend auf diesen Werten kann die Schüttelgeschwindigkeit berechnet werden.
    //Geschwindigkeit = Strecke/Zeit
    //X-Achsen-Geschwindigkeit
    float speadX = (x - bx) / (System.currentTimeMillis() - btime);
    //Y-Achsen-Geschwindigkeit
    float speadY = (y - by) / (System.currentTimeMillis() - btime);
    //Z-Achsen-Geschwindigkeit
    float speadZ = (z - bz) / (System.currentTimeMillis() - btime);
    //So kann diese einfache Geschwindigkeit berechnet werden. Wenn Sie die Beschleunigung berechnen möchten, können Sie dies auch tun. In der Kinematik hängt die Beschleunigung a von der Geschwindigkeit
    //die Bewegungsabläufe haben alle damit zu tun: Vt=V0+at,S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a) Aufgrund dieser Informationen kann a berechnet werden
    bx = x;
    by = y;
    bz = z;
    btime = System.currentTimeMillis();
  };
  public void onAccuracyChanged(Sensor s, int accuracy) {
  };
};
// Registrierung des Listeners, das dritte Argument ist die Genauigkeit der Überwachung
sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);

Interessierte Leser können mehr über Android-Beiträge in den Themenbereichen dieser Website nachlesen: 'Einführung und Fortgeschrittene Android-Entwicklung', 'Zusammenfassung der Techniken der Android-View-View', 'Zusammenfassung der Techniken der Android-activity-Operation', 'Zusammenfassung der Techniken der Android-Operation von SQLite-Datenbanken', 'Zusammenfassung der Techniken der Android-Operation von JSON-Format-Daten', 'Zusammenfassung der Techniken der Android-Datenbankoperationen', 'Zusammenfassung der Techniken der Android-Dateioperationen', 'Zusammenfassung der Methoden der Android-SD-Karte-Operation', 'Zusammenfassung der Techniken der Android-Ressourcenoperation' und 'Zusammenfassung der Verwendung von Android-Kontrollen'.

Es wird gehofft, dass das in diesem Artikel beschriebene Wissen für die Android-Programmgestaltung von Vorteil sein wird.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet entnommen und gehört dem jeweiligen Urheber. Der Inhalt wurde von Internetnutzern selbstständig bereitgestellt und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat die Inhalte nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Haftung. Wenn Sie Inhalte entdecken, die möglicherweise urheberrechtlich geschützt sind, senden Sie bitte eine E-Mail an: notice#oldtoolbag.com (bei der Mitteilung per E-Mail, bitte # durch @ ersetzen, um Missbrauch zu melden und relevante Beweise bereitzustellen. Sobald nachgewiesen wird, dass Inhalte urheberrechtlich geschützt sind, wird diese Website die betreffenden Inhalte sofort löschen.

Gefällt mir