senzor de orientare - o combinație a senzorului de câmp magnetic sunt îndeplinite rolul busolei și un accelerometru care măsoară înclinarea și rotirea.
Dacă sunteți familiarizat cu trigonometria, astfel încât să aibă abilitățile necesare pentru a calcula poziția dispozitivului pe toate cele trei axe, pe baza mărturiei accelerometru vyvayas și senzori de câmp magnetic. Cu toate acestea, în cazul în care vă alimenta un trigonometrie aceleasi sentimente ca si mine, va fi încântat să afle că Android va face toate calculele mine.
De fapt, Android oferă două modalități de a determina poziția dispozitivului. Puteți face o cerere direct la orientarea senzorului sau pentru a obține datele necesare de la accelerometru si senzori de câmp magnetic. A doua opțiune este mai lent, dar are avantajele oferite de - o precizie îmbunătățită și capacitatea de a schimba cadrul de referință pentru determinarea poziției în spațiu. Următoarele secțiuni sunt descrise de ambele abordări.
Atunci când se utilizează o poziție sistem standard de referință al dispozitivului în trei dimensiuni este calculată, așa cum se arată în Fig. 14.2. Ca și în cazul unui accelerometru, dispozitivul este considerat în repaus, ecran situată pe o suprafață plană.
• Axa X (direcția). Direcția VO dispozitiv în timpul deplasării în jurul axei X; 0 ° / 360 ° - latitudine nordică, 90 ° - est, la 180 ° - Sud, la 270 ° - vest.
• axa Y (inclinare). Unghiul de înclinare Dispozitiv în raport cu axa de rotație în timpul Y. El este egal cu 0 °, în cazul în care dispozitivul se află pe capacul din spate,
-90 ° - dacă este așezată vertical (partea superioară a dispozitivului îndreptat în sus), 90 ° - dacă este inversat 180 ° / -180 ° - în cazul în care ekra- prefectura jos.
• Axa Z (rotație). Revenind la înclinare laterală proactivă axial dispozitiv
Z între -90 ° și 90 °. La 0 ° dispozitivul se află pe capacul din spate, cu
-90 ° ecran este întoarsă spre stânga, la 90 ° - spre dreapta.
utilizând senzorul de orientare
Cel mai simplu mod de a urmări poziția dispozitivului în spațiu - utilizarea unui senzor de orientare separat. Crearea și ruyte de SensorEventListener înregistrate folosind SensorManager obiect utilizând senzorul de orientare implicit, așa cum se arată în Listarea 14.3.
Listarea 14.3. utilizând senzorul de orientare
SensorManager sm = (SensorManager) getSystemService (Context.SENSOR_ SERVICE);
int sensorType = Sensor.TYPE_ORIENTATION;
sm.registerListener (myOrientationListener, sm.getDefaultSensor (sensorType), SensorManager.SENSOR_DELAY_NORMAL);
În cazul în care poziția dispozitivului este schimbat, în implementarea SensorEventListener handler interfeței declanșat onSensorChanged. Parametrul SensorEvent include o matrice de valori float care descriu poziția dispozitivului în trei axe. Primul element din matrice - Direcția, al doilea - panta, al treilea - rotație.
finală SensorEventListener myOrientationListener = new
public void onSensorChanged (SensorEvent sensorEvent)
if (sensorEvent.sensor.getType () == Sensor.TYPE_ORIENTATION)
float headingAngle = sensorEvent.values [0]; float pitchAngle = sensorEvent.values [1]; float rollAngle = sensorEvent.values [2];
// TODO Utilizarea schimbarea poziției în program.
public void onAccuracyChanged (senzor, precizie int) <>