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

Analisi della tecnica di applicazione dell'applicazione con sensazione di gravità nel programming Android

Questo articolo descrive l'applicazione del rilevamento della gravità nel programming Android. Condividiamo con tutti per riferimento, come segue:

Il rilevamento della gravità si basa principalmente sul sensore di accelerazione del telefono (accelerometer)

Nello sviluppo Android ci sono in totale otto tipi di sensori, ma non tutti i modelli di dispositivi reali supportano questi sensori. Poiché molte funzioni gli utenti non se ne curano, i sviluppatori potrebbero nascondere alcune funzioni. È necessario fare sviluppo in base alla situazione reale del dispositivo reale. Di seguito, discuteremo principalmente del modo di implementazione specifica del sensore di accelerazione, il nome del sensore è il seguente:

Sensore di accelerazione (accelerometer)
Sensore di giroscopio (gyroscope)
Sensore di illuminazione ambientale (light)
Sensore di campo magnetico (magnetic field)
Sensore di orientamento (orientation)
Sensore di pressione (pressure)
Sensore di prossimità (proximity)
Sensore di temperatura (temperature)

1. Oggetto di gestione dei sensori SensorManager

Tutti i sensori nel telefono devono essere acceduti tramite SensorManager, chiamando il metodo getSystemService(SENSOR_SERVICE) è possibile ottenere l'oggetto di gestione dei sensori del telefono corrente.

2. Implementare l'interfaccia SensorEventListener

Dobbiamo implementare l'interfaccia SensorEventListener e il metodo onSensorChanged(SensorEvent event) per catturare lo stato del sensore del telefono, ottenere le componenti di gravità in tre direzioni dell'asse X, Y e Z del telefono, e con questi dati delle tre direzioni, abbiamo già imparato il principio del rilevamento della 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];
};

Come mostrato nel codice sopra: i valori di float x, y, z nelle tre direzioni sono tra -10 e 10. Di seguito spiego il significato delle componenti di gravità degli assi X, Y, Z (qui è necessario notare che l'origine del sistema di coordinate: verso il cielo è numero positivo, verso il pavimento è numero negativo, esattamente opposto al sistema di coordinate utilizzato durante la programmazione):

(1) Quando lo schermo del telefono è rivolto verso sinistra, l'asse X punta verso il cielo, posizionato verticalmente, in questo momento l'asse Y e Z non hanno componenti di gravità, poiché l'asse X punta verso il cielo la sua componente di gravità è massima. In questo momento, i valori delle componenti di gravità degli assi X, Y, Z sono (10, 0, 0);

(2) Quando lo schermo del telefono è rivolto verso destra, l'asse X punta verso il pavimento, posizionato verticalmente, in questo momento l'asse Y e Z non hanno componenti di gravità, poiché l'asse X punta verso il pavimento la sua componente di gravità è minima. In questo momento, i valori delle componenti di gravità degli assi X, Y, Z sono (-10, 0, 0);

(3) Quando lo schermo del telefono è posizionato in posizione verticale, l'asse Y punta verso il cielo, posizionato verticalmente, in questo momento l'asse X e Z non hanno componenti di gravità, poiché l'asse Y punta verso il cielo la sua componente di gravità è massima. In questo momento, i valori delle componenti di gravità degli assi X, Y, Z sono (0, 10, 0);

(4) Quando lo schermo del telefono è posizionato in posizione verticale, l'asse Y punta verso il pavimento, posizionato verticalmente, in questo momento l'asse X e Z non hanno componenti di gravità, poiché l'asse Y punta verso il pavimento la sua componente di gravità è minima. In questo momento, i valori delle componenti di gravità degli assi X, Y, Z sono (0, -10, 0);

(5) Quando lo schermo del telefono è rivolto verso l'alto, l'asse Z punta verso il cielo, posizionato orizzontalmente, in questo momento l'asse X e Y non hanno componenti di gravità, poiché l'asse Z punta verso il cielo la sua componente di gravità è massima. In questo momento, i valori delle componenti di gravità degli assi X, Y, Z sono (0, 0, 10);

(6) Quando lo schermo del telefono è rivolto verso l'alto, l'asse Z punta verso il pavimento, posizionato orizzontalmente, in questo momento l'asse X e Y non hanno componenti di gravità, poiché l'asse Z punta verso il pavimento la sua componente di gravità è minima. In questo momento, i valori delle componenti di gravità degli assi X, Y, Z sono (0, 0, -10).

3. Registrazione di SensorEventListener

Eseguendo SensorMannager per ottenere l'oggetto Sensor dell'accelerometro chiamando il metodo getDefaultSensor(Sensor.TYPE_ACCELEROMETER). Poiché sto discutendo del sensore di accelerazione di gravità, il parametro è Sensor.TYPE_ACCELEROMETER. Se si desidera ottenere altri sensori, è necessario passare il nome corrispondente. Utilizzare SensorMannager per chiamare il metodo registerListener(), il terzo parametro è la precisione di rilevamento, scegliere la precisione in base alle diverse esigenze, nel caso dello sviluppo di giochi si consiglia di utilizzare SensorManagerSENSOR_DELAY_GAME.

4. Il metodo di calcolo semplice della velocità della rilevazione della gravità

Ogni volta che si scuote il telefono, si calcolano le componenti di gravità X, Y, Z dell'asse X, Y, Z e possono essere registrate. Poi, ogni volta che si scuote la componente di gravità della gravità e la componente di gravità precedente possono essere confrontate, utilizzando la differenza e il tempo per calcolare la loro velocità di movimento.

Il dispositivo di rilevamento della gravità include i tre componenti di sensore, processore e controller. Il sensore è responsabile di rilevare lo stato della memoria e calcolare il valore dell'accelerazione di gravità della memoria; il processore giudica se il valore dell'accelerazione è al di sopra del range sicuro; il controller è responsabile di controllare il bloccaggio o la liberazione del disco rigido in una zona di停泊 sicura. Una volta che il sensore rileva e il processore giudica che l'accelerazione di gravità attuale è superiore al valore sicuro, il controller smetterà immediatamente di leggere e scrivere attraverso il controllo hardware del disco rigido e rapidamente si riporterà a posizionamento, bloccandosi in una zona di停泊 dedicata. Questa serie di azioni sarà completata entro 200 millisecondi. Solo quando il dispositivo di rilevamento della gravità rileva che il valore dell'accelerazione è tornato al range normale, il prodotto tornerà a funzionare.

Il codice del framework multimediale Android si trova nei seguenti directory: external/opencore/. Questa directory è la directory radice del framework multimediale Android, e contiene le seguenti sottodirectory:

* android: questa è una libreria di livello superiore, basata sul SDK di PVPlayer e PVAuthor, che implementa un Player e un Author per Android
* baselibs: libreria di basso livello che contiene strutture dati e thread safety ecc.
* codecs_v2: questa libreria è piuttosto ampia, contiene principalmente implementazioni di decodifica e codifica, nonché una implementazione di OpenMAX
* engines: implementazione degli engine PVPlayer e PVAuthor
*extern_libs_v2: include i file di intestazione di OpenMAX di khronos
*fileformats: classi di parsing (parser) specifiche per i formati di file
* nodes: classi di node per la decodifica e la解析 dei file
* oscl: libreria di compatibilità del sistema operativo
* pvmi: interfaccia astratta di controllo di input/output
* protocols: principalmente contenuti relativi ai protocolli di rete come RTSP, RTP, HTTP ecc.
* pvcommon:file Android.mk del pacchetto pvcommon, senza file di origine
*pvplayer:file Android.mk del pacchetto pvplayer, senza file di origine
* pvauthor:file Android.mk del pacchetto pvauthor, senza file di origine
* tools_v2:strumenti di compilazione e alcuni moduli registrabili

Di seguito è riportato parte del codice di test:

private SensorManager sensorMgr;
Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//Salvare le coordinate x, y, z dell'ultima volta
float bx = 0;
float by = 0;
float bz = 0;
long btime = 0;//Questa volta il tempo
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];
    //Calcolato i valori di X, Y, Z, si può calcolare la velocità di oscillazione basandosi su questi valori
    //Velocità = Distanza/Tempo
    //Velocità dell'asse X
    float speadX = (x - bx) / (System.currentTimeMillis() - btime);
    //Velocità dell'asse y
    float speadY = (y - by) / (System.currentTimeMillis() - btime);
    //Velocità dell'asse z
    float speadZ = (z - bz) / (System.currentTimeMillis() - btime);
    //Con questa semplice velocità è possibile calcolare, se si desidera calcolare l'accelerazione anche, nella meccanica classica, l'accelerazione a è proporzionale alla velocità,
    // The displacement is related: Vt=V0+at, S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a), with this information, you can also solve a
    bx = x;
    by = y;
    bz = z;
    btime = System.currentTimeMillis();
  };
  public void onAccuracyChanged(Sensor s, int accuracy) {
  };
};
// Register listener, the third parameter is the detection accuracy
sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);

Readers who are interested in more content related to Android can check the special topics on this site: 'Android Development Tutorial for Beginners and Advanced', 'Summary of Android View View Skills', 'Summary of Activity Operation Skills in Android Programming', 'Summary of SQLite Database Operation Skills in Android', 'Summary of JSON Format Data Operation Skills in Android', 'Summary of Database Operation Skills in Android', 'Summary of File Operation Skills in Android', 'Summary of SD Card Operation Methods in Android Programming Development', 'Summary of Resource Operation Skills in Android', and 'Summary of Android Control Usage'.

I hope the content described in this article will be helpful to everyone's Android program design.

Declaration: The content of this article is from the Internet, the copyright belongs to the original author. The content is contributed and uploaded by Internet users spontaneously. This website does not own the copyright, does not edit the content manually, and does not assume relevant legal responsibilities. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (when sending an email, please replace # with @) to report it and provide relevant evidence. Once confirmed, this site will immediately delete the content suspected of infringement.

Ti potrebbe interessare