Im creare un'applicazione in cui ho bisogno di posizionare un ImageView a seconda dell'Orientamento del dispositivo. Io uso ai valori di un campo magnetico e accelerometro sensori per calcolare l'orientamento del dispositivo conOrientamento bussola Android inaffidabile (filtro passa basso)
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerValues, magneticFieldValues)
SensorManager.getOrientation(rotationMatrix, values);
double degrees = Math.toDegrees(values[0]);
mio problema è che il posizionamento del ImageView è molto sensibile alle variazioni di orientamento. Rendere la vista di immagini costantemente saltando sullo schermo. (perché i gradi cambiano)
Ho letto che questo può essere dovuto al fatto che il mio dispositivo è vicino a cose che possono influenzare le letture del campo magnetico. Ma questa non è l'unica ragione per cui sembra.
Ho provato a scaricare alcune applicazioni e ho trovato che "3D compass" e "Compass" rimangono estremamente stabili nelle sue letture (quando si imposta il filtro rumore), vorrei lo stesso comportamento nella mia applicazione.
Ho letto che posso modificare il "rumore" delle mie letture aggiungendo un "Filtro passa basso", ma non ho idea di come implementarlo (a causa della mia mancanza di matematica).
Im sperando che qualcuno possa aiutarmi a creare una lettura più stabile sul mio dispositivo, dove un piccolo movimento verso il dispositivo non influenzerà l'orientamento corrente. In questo momento faccio un piccolo
if (Math.abs(lastReadingDegrees - newReadingDegrees) > 1) { updatePosition() }
Per filtrare un po 'nervosa del rumore. Ma la sua non funziona molto bene :)
Ho cancellato la mia risposta "ripetuta", ma ho pensato che avrebbe davvero aiutato le persone perché conosco il dolore di attraversare questo enigma del rumore del sensore su Android. Comunque, per le persone in futuro, ecco la soluzione che funziona per me -> http://stackoverflow.com/a/39276888/1262089 –