Widzę, że Xamarin ma dokumenty dla Creating a Gesture Listener, ale nic o "potrząsaniu" urządzeniem tylko "rzucać" na ekranie. Zastanawiam się, czy Xamarin dla Androida jest w stanie słuchać gestów drżenia? Czy ktoś wie, czy ktoś próbował? Z góry dziękuję.Czy Xamarin obsługuje wstrząsnąć akcelerometr na Androida?
Odpowiedz
Oto pełny przykład, który wykorzystuje Android.Hardware.ISensorEventListener
do wykrywania gestu drżenia. Powinieneś być w stanie wrzucić to do własnego projektu (projektów) bez żadnych kłopotów.
[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
}
Powyższa aktywność realizuje interfejs Android.Hardware.ISensorEventListener
, a następnie rejestruje się przez SensorManager
. Rzeczywiste zdarzenia czujnika (wstrząs itp.) Są przesyłane do OnSensorChanged
; to tutaj trzymamy logikę naszego kodu wykrywania wstrząsów.
Oparłem tę odpowiedź na this one, ale dokonałem kilku modyfikacji. Po pierwsze, ta odpowiedź używa ISensorEventListener zamiast ISensorListener (która została uznana za przestarzałą na poziomie interfejsu API 3). Znajdziesz w nim funkcję wykrywania gestów początkowych (poprzez hasUpdated
) i niektóre zmienne kontrolujące czułość drgań. Grając z ShakeDetectionTimeLapse
i ShakeDetectionThreshold
powinieneś być w stanie dostosować go do swoich potrzeb.
Patrz:
- 1. czy xamarin obsługuje coreBluetooth na iOS?
- 2. Instalowanie Xamarin Mono na Androida
- 3. Zainstaluj Xamarin Mono na Androida
- 4. Aktualizacja aplikacji Xamarin na Androida
- 5. OnBackPressed w Xamarin Androida
- 6. Jakie intencje obsługuje aplikacja Facebook na Androida?
- 7. W jaki sposób Xamarin na Androida (Mono na Androida) porównuje się do rodzimego programowania Androida?
- 8. Czy można uruchomić Xamarin Mono na Linux?
- 9. wstrząsnąć animacja (wersja 3d)
- 10. Czy można uruchomić akcelerometr iPhone'a w tle?
- 11. JavaScript wstrząsnąć elementem html
- 12. Zastosowany akcelerometr w manifeście
- 13. Akcelerometr z dolnoprzepustowym filtrem
- 14. Xamarin Forms PCL HttpClient rzuca nieobsługiwany wyjątek na Androida
- 15. dlaczego wziąć pustą aplikację Xamarin na Androida około 10mb?
- 16. card.io Mono dla Androida (Xamarin Studio)
- 17. Użyj żyroskopu/akcelerometr z Arduino
- 18. Czy Android Studio obsługuje projekt AngularJS dla Androida UI?
- 19. Czy Android obsługuje wiele języków?
- 20. Odwołanie do PCL (Portable Class Library) z projektu Xamarin Mono na Androida
- 21. Czy Twitter obsługuje OAuth 2.0?
- 22. Aparat z obsługą Androida obsługuje rozmiary obrazów
- 23. C# na Androidzie: Xamarin or Unity?
- 24. Czy Chrome na iOS obsługuje interfejs API filessytem
- 25. Czy CoreData na iPhone obsługuje predykaty IN?
- 26. Xamarin sider.dll brakuje
- 27. Czy Cassandra obsługuje sharding?
- 28. Czy Android obsługuje OpenCL?
- 29. Czy Node.js obsługuje paralelizm?
- 30. Czy SystemVerilog obsługuje downcasting?
dam tego spróbować i poinformować. Dziękuję bardzo :) –