Android 传感器之《加速传感器》——摇一摇功能
Android傳感器開發(fā)參考網(wǎng)站:
Android Developers鏡像網(wǎng)站:http://wear.techbrood.com/guide/topics/sensors/sensors_overview.html
Android Developers中文翻譯:http://blog.csdn.net/think_soft/article/details/8054692
仿微信搖一搖功能主要使用加速傳感器
1.獲取傳感器管理器的實例
sensorManager = (SensorManager) getSystemService(Service.SENSOR_SERVICE);
2.在Activity的onResume生命周期方法中注冊加速傳感器
SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int rateUs) 參數(shù)詳解:
listener :傳感器監(jiān)聽事件,SensorEventListener接口,提供了以下兩個回調(diào)方法:
onSensorChanged(SensorEvent event):傳感器值的變化
event的實例的values變量非常重要,根據(jù)傳感器的不同,里面的值代表的含義也不相同,以加速傳感器為例:
values該變量的類型是float[]數(shù)組,最多有三個元素:
float x = values[0] 代表X軸
float y = values[1] 代表Y軸
float z = values[2] 代表Y軸
X軸的方向是沿著屏幕的水平方向從左向右。如果手機不是正方形的話,較短的邊需要水平放置,較長的邊需要垂直放置。Y軸的方向是從屏幕的左下角開始沿著屏幕的垂直方向指向屏幕的頂端。將手機平放在桌子上,Z軸的方向是從手機里指向天空。
我們判斷手機是否搖一搖,只要x,y,z軸,達到設定的閥值時就表示搖一搖。
onAccuracyChanged(Sensor sensor, int accuracy):傳感器精度的變化
精度使用以下四個狀態(tài)常量之一來代表的:
SENSOR_STATUS_ACCURACY_LOW
SENSOR_STATUS_ACCURACY_MEDIUM
SENSOR_STATUS_ACCURACY_HIGH
SENSOR_STATUS_UNRELIABLE
sensor :傳感器實例,這里使用加速傳感器 sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER
rateUs ?:?感應器反應速度,有四個常量共選擇
SENSOR_DELAY_NORMAL:匹配屏幕方向的變化,默認傳感器速度;
SENSOR_DELAY_UI:匹配用戶接口,如果更新UI建議使用;
SENSOR_DELAY_GAME:匹配游戲,游戲開發(fā)建議使用SENSOR_DELAY_FASTEST.:匹配所能達到的最快;
以上四種常量,根據(jù)實際情況選擇,一般情況選擇第一種就可以。
3. 在onPause生命周期方法中,注銷相應傳感器
SensorManager.unregisterListener(SensorEventListener listener, Sensor sensor)
注意:為防止同一時間內(nèi)重復觸發(fā)搖一搖事件,可以設置一個記錄上次觸發(fā)事件的時間點變量,用于控制是否觸發(fā)搖一搖事件!
示例代碼:package com.example.androidtest;import android.app.Activity; import android.app.Service; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.Toast;public class MainActivity extends Activity implements SensorEventListener{//觸發(fā)搖一搖的最小時間間隔private final int SHAKE_SHORTEST_TIME_INTERVAL = 5;//傳感器值變化的閥值private final int SHAKE_SHORTEST_SENSOR_VALUE = 10;private long lastShakeTime = 0;private SensorManager sensorManager;private Sensor sensor;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sensorManager = (SensorManager) getSystemService(Service.SENSOR_SERVICE);sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);}@Overrideprotected void onResume() {super.onResume();sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onPause() {super.onPause();sensorManager.unregisterListener(this, sensor);}@Overridepublic void onSensorChanged(SensorEvent event) {long currentTime = System.currentTimeMillis();int type = event.sensor.getType();if (((currentTime-lastShakeTime) <= SHAKE_SHORTEST_TIME_INTERVAL) ||(type != Sensor.TYPE_ACCELEROMETER)) {return;}lastShakeTime = currentTime;float[] values = event.values;if ((Math.abs(values[0]) > SHAKE_SHORTEST_SENSOR_VALUE || Math.abs(values[1]) > SHAKE_SHORTEST_SENSOR_VALUE || Math.abs(values[2]) > SHAKE_SHORTEST_SENSOR_VALUE)){ Toast.makeText(this, "搖一搖成功", Toast.LENGTH_SHORT).show(); } }@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}}
總結(jié)
以上是生活随笔為你收集整理的Android 传感器之《加速传感器》——摇一摇功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.5 51单片机-DS18B20温度传
- 下一篇: python空气质量分析与预测_干货!如