Android Motion sensor
The Android platform supports a number of sensors for monitoring device actions (5 sensors in total). Two of them (acceleration sensor and gyroscope sensor) are pure hardware sensors. The other three (gravity sensors, linear acceleration sensors, and rotational vector sensors) may be hardware sensors or software sensors. For example, in some Android devices, these software-based sensors get data from acceleration and magnetic sensors, but they may also get data from gyroscope sensors on other Android devices. In other words, the same software-based sensor may return data from different hardware sensors on different Android devices. So the same sensor based on software may have different accuracy and range of use in various devices. Most high-end Android devices will have acceleration sensors and some have gyroscope sensors.
Motion sensors are useful for monitoring the movement of devices, such as tilt, vibration, rotation, and swing, which are the monitoring ranges of the motion sensors. The movement of a device is usually a direct response to user input. For example, the user is racing in the game, or controlling a ball in the game). In addition, the physical environment in which the device is located is also reflected in the action of the device, for example, when the user is driving a car, and this is an Android device that is lying quietly in the seat next to it, even though the device is not moving, but will vibrate as the car moves and the device will move with the car.
For the first case, the relative position of the device itself can be monitored. For the second case, a reference frame other than the device needs to be taken into account. The motion sensor itself is not normally used to monitor the location of the device, and the location of the device needs to be monitored with other types of sensors, such as magnetic field sensors.
All motion sensors return a value of three floating-point numbers (returned by an array of length 3), but for different sensors, the three have a different meaning. For example, for an acceleration sensor, three axes of data are returned. For a gyroscope sensor, the rotational angular velocity of three axes is returned.
The device pushes from left to right and the x-axis acceleration is positive.
The device pushes toward itself, and the y-axis acceleration is positive.
If the acceleration of a m/s^2 is driven towards the sky, then the acceleration of the z-axis is a + 9.81, so if the actual acceleration is calculated (to counteract the gravitational acceleration), it needs to be reduced by 9.81.
View
<linearlayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http// Schemas.android.com/tools "android:layout_width=" match_parent " android:layout_height=" Match_parent " android:paddingleft= "@dimen/activity_horizontal_margin" android:paddingright= "@dimen/activity_ Horizontal_margin " android:paddingtop=" @dimen/activity_vertical_margin " Android: paddingbottom= "@dimen/activity_vertical_margin" tools:context= ". Mainactivity " android:orientation=" vertical "> <textview android:id=" @+id/sensor " Android:layout_width= "Wrap_content" android:layout_height= "Wrap_content"/> <textview android:id= "@+id/gravity" android:layout_width= "wrap_content" Android: layout_height= "Wrap_content"/> <textview android:id= "@+id/proximity1" android:layout_width= " Wrap_content " Android:layout_height= "Wrap_content"/></linearlayout>
Java:
Pupublic class Mainactivity extends actionbaractivity implements sensoreventlistener{ Private TextView sensor=null; Private Sensormanager msensormanager; private TextView gravitytv=null;& nbsp Private float[] gravity=new float[3]; @Override protected void onCreate (Bundle savedinst Ancestate) { super.oncreate (savedinstancestate); Setcontentview ( R.layout.activity_main); sensor= (TextView) Findviewbyid (r.id.sensor); & nbsp Msensormanager= (Sensormanager) getsystemservice (sensor_service); } @Override protected void Onresume () { Super.onresume (); Msensormanager.regist Erlistener (this, Msensormanager.getdefaultsensor (sensor.type_ ACCELEROMETER),//acceleration sensor,   SENSORMANAGER.SENSOR_DELAY_UI)//sensormanager.sensor_delay_ui sampling frequency Msensormanager.registerlistener (this, Msensormanager.getdefaultsensor (sensor.type_gravity),//Gravity sensor, Sensormanager.sensor_delay_fastest)//sensormanager.sensor_delay_ui sampling frequency Msensormanager.registerlistener (this, Msensormanager.getdefaultsensor (sensor.type_proximity),//Proximity sensor SENSORMANAGER.SENSOR_DELAY_UI); } @Override protected void OnPause () { & nbsp Super.onpause (); Msensormanager.unregisterlistener (this);//Uninstall All sensors } //change of sensing status @Override public void onsensorchanged (Sensorevent evenT) { switch (Event.sensor.getType ()) { Case Sensor.type _accelerometer://Accelerometer //minus noise (interference) &NBSP ; Final float alpha= (float) 0.8; Gravity[0]=alpha *gravity[0]+ (1-alpha) *event.values[0]; gravity[1]=alpha*gravity [1]+ (1-alpha) *event.values[1]; gravity[2]=alpha*gravity[2]+ (1- Alpha) *event.values[2]; String accelerometer=string.valueof ("X:" + (Event.values[0]-gravity[0]) + "\ny:" + ( EVENT.VALUES[1]-GRAVITY[1]) + "\NZ:" + (EV ENT.VALUES[2]-GRAVITY[2]); sensor= (TextView) Findviewbyid (r.id.sensor); Sensor.settext (accelerometer); LOG.I (" X: ", String.valueof ((Event.values[0]-gravity[0])); LOG.I (" Y: ", S Tring.valueof ((Event.values[1]-gravity[1])); LOG.I ("Z:", String . ValueOf ((event.values[2]-gravity[2))); break; & nbsp Case sensor.type_gravity: Gravity[0]=event.val ues[0]; gravity[1]=event.values[1]; &NBS P gravity[2]=event.values[2]; gravitytv= (TEXTVI EW) Findviewbyid (r.id. Gravity); Gravitytv.settext (string.valueof ("gravity[0]=" + event.values[0]+ "\ngravity[1]=" +event.values[1]+ & nbsp "\ngravity[2]=" +event.values[2]); &NBS P break; case sensor.type_proximity: &NBSP ; TextView proximity= (TextView) Findviewbyid (r.id.proximity1); &NBS P Proximity.settext (string.valueof (event.values[0)); break; } } //accuracy change @Override public void ONACCU Racychanged (sensor sensor, int accuracy) { }}
Android Motion sensor