这是一个Android.Hardware.ISensorEventListener用于检测摇动手势的完整示例.您应该能够毫不费力地将其放入您自己的项目中.
[Activity (Label = "ShakeDetection", MainLauncher = true)]
public class MainActivity : Activity, Android.Hardware.ISensorEventListener
{
bool hasUpdated = false;
DateTime lastUpdate;
float last_x = 0.0f;
float last_y = 0.0f;
float last_z = 0.0f;
const int ShakeDetectionTimeLapse = 250;
const double ShakeThreshold = 800;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
// Register this as a listener with the underlying service.
var sensorManager = GetSystemService (SensorService) as Android.Hardware.SensorManager;
var sensor = sensorManager.GetDefaultSensor (Android.Hardware.SensorType.Accelerometer);
sensorManager.RegisterListener(this, sensor, Android.Hardware.SensorDelay.Game);
}
#region Android.Hardware.ISensorEventListener implementation
public void OnAccuracyChanged (Android.Hardware.Sensor sensor, Android.Hardware.SensorStatus accuracy)
{
}
public void OnSensorChanged (Android.Hardware.SensorEvent e)
{
if (e.Sensor.Type == Android.Hardware.SensorType.Accelerometer)
{
float x = e.Values[0];
float y = e.Values[1];
float z = e.Values[2];
DateTime curTime = System.DateTime.Now;
if (hasUpdated == false)
{
hasUpdated = true;
lastUpdate = curTime;
last_x = x;
last_y = y;
last_z = z;
}
else
{
if ((curTime - lastUpdate).TotalMilliseconds > ShakeDetectionTimeLapse) {
float diffTime = (float)(curTime - lastUpdate).TotalMilliseconds;
lastUpdate = curTime;
float total = x + y + z - last_x - last_y - last_z;
float speed = Math.Abs(total) / diffTime * 10000;
if (speed > ShakeThreshold) {
Toast.MakeText(this, "shake detected w/ speed: " + speed, ToastLength.Short).Show();
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
上面的活动实现了Android.Hardware.ISensorEventListener接口,然后通过它注册它SensorManager.实际传感器事件(摇动等)通过管道传输OnSensorChanged; 这是我们为摇动检测代码保留逻辑的地方.
我的答案基于这个,但对它进行了一些修改.首先,这个答案使用ISensorEventListener而不是ISensorListener(在API级别3中已弃用).并且你会发现包括(通过hasUpdated)开始手势检测和一些变量来控制震动的灵敏度.通过玩耍ShakeDetectionTimeLapse,ShakeDetectionThreshold你应该能够根据自己的需要进行微调.
看到:
| 归档时间: |
|
| 查看次数: |
4496 次 |
| 最近记录: |