背景
今天有对设备的运动 跌落的检测
这里简单的了解了系统的传感器接口 有如下几个接口 对大家进行推荐
Android 平台提供多种传感器,可让您监视设备的运动。
传感器的可能架构因传感器类型而异:
- 重力、线性加速度、旋转矢量、有效运动、计步器和步测器传感器可能基于硬件,也可能基于软件。
- 加速度计传感器和陀螺仪传感器始终基于硬件。
大多数 Android 设备都配有加速度计,而现在许多设备都带有陀螺仪。基于软件的传感器的可用性更具可变性,
因为其通常依赖一个或多个硬件传感器来获取其数据。根据设备的不同,这些基于软件的传感器可以从加速度计和磁力计或陀螺仪中获取其数据。
运动传感器在监控设备运动方面(例如倾斜、晃动、旋转或摆动)非常有用。该移动通常是用户直接输入的反映(例如,用户在游戏中驾驶汽车,或在游戏中控制球),
但也可能反映设备所处的物理环境(例如,在开车时与您一起移动)。
在第一种情况下,您正在监控相对于设备参照系或应用参照系的运动;
在第二种情况下,您正在监控相对于世界参照系的运动。运动传感器本身通常不用于监视设备位置,但可以与其他传感器(例如地磁场传感器)一起使用,以确定设备相对于世界参照系的位置
使用有效运动传感器
这里我们讲一讲有效运动传感器
每次检测到有效运动时,有效运动传感器都会触发事件,然后将其禁用。
有效运动是可能导致用户位置发生变化的运动;例如步行、骑自行车或坐在行驶的车上。
以下代码展示如何获取默认有效运动传感器的实例以及如何注册事件侦听器:
private SensorManager sensorManager;
private Sensor sensor;
private TriggerEventListener triggerEventListener;
...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);
triggerEventListener = new TriggerEventListener() {
@Override
public void onTrigger(TriggerEvent event) {
// Do work
}
};
sensorManager.requestTriggerSensor(triggerEventListener, mSensor);
TYPE_SIGNIFICANT_MOTION 没有数据 只是一个触发功能
TriggerEventListener
added in API 18
Here's an example setup for a TriggerEventListener:
class TriggerListener extends TriggerEventListener {
public void onTrigger(TriggerEvent event) {
// Do Work.
// As it is a one shot sensor, it will be canceled automatically.
// SensorManager.requestTriggerSensor(this, mSigMotion); needs to
// be called again, if needed.
}
}
public class SensorActivity extends Activity {
private final SensorManager mSensorManager;
private final Sensor mSigMotion;
private final TriggerEventListener mListener = new TriggerEventListener();
public SensorActivity() {
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mSigMotion = mSensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);
}
protected void onResume() {
super.onResume();
mSensorManager.requestTriggerSensor(mListener, mSigMotion);
}
protected void onPause() {
super.onPause();
// Call disable to ensure that the trigger request has been canceled.
mSensorManager.cancelTriggerSensor(mListener, mSigMotion);
}
}
使用计步器传感器
注意:您必须声明 ACTIVITY_RECOGNITION 权限,以便您的应用在运行 Android 10 (API 级别 29) 或更高版本的设备上使用此传感器。
计步器传感器提供自已激活传感器后最后一次重启以来用户迈出的步数。与步测器传感器相比,计步器的延迟时间更长(最多 10 秒),但精确度更高。
private SensorManager sensorManager;
private Sensor sensor;
...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
使用步测器传感器
每次用户迈步时,步测器传感器都会触发事件。延迟时间预计将低于 2 秒。
注意:您必须声明 ACTIVITY_RECOGNITION 权限,以便您的应用在运行 Android 10 (API 级别 29) 或更高版本的设备上使用此传感器。
private SensorManager sensorManager;
private Sensor sensor;
...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
有效运动传感器 Demo
//对有效运动的封装
public class SignificantMotionSensorService extends android.app.Service {
public static final String SIGNIFICANT_MOTION_SENSOR_SERVICE_INTENT = "significant motion sensor service intent";
public static final String SIGNIFICANT_MOTION_SENSOR_SERVICE_INTENT_EXTRA_IS_MOVING = "moving";
private SensorManager sensorManager;
private Sensor sensor;
private SignificantMotionSensor significantMotionSensor;
@Override
public void onCreate() {
super.onCreate();
significantMotionSensor = new SignificantMotionSensor();
sensorManager.requestTriggerSensor(significantMotionSensor, sensor);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
private class SignificantMotionSensor extends TriggerEventListener {
public SignificantMotionSensor() {
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);
}
@Override
public void onTrigger(TriggerEvent event) {
//通过广播将时间发送出去
Intent i = new Intent(SIGNIFICANT_MOTION_SENSOR_SERVICE_INTENT);
i.putExtra(SIGNIFICANT_MOTION_SENSOR_SERVICE_INTENT_EXTRA_IS_MOVING, "true");
sendBroadcast(i);
sensorManager.requestTriggerSensor(significantMotionSensor, sensor);
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。