Мне нужно добавить функцию встряхивания, которая обновит мое приложение для Android.
Все, что я нахожу из документации, включает в себя реализацию SensorListener
, но Eclipse говорит мне, что она устарела и предлагает SensorEventListener
.
У кого-нибудь есть хорошее руководство по созданию этого shake controller
?
Ответы:
Вот пример кода. Поместите это в свой класс деятельности:
И добавьте это в ваш метод onCreate:
Затем вы можете спросить «mAccel» в своем приложении, где вы хотите, о текущем ускорении, независимо от оси и очищенном от статического ускорения, такого как гравитация. Это будет ок. 0, если нет движения, и, скажем,> 2, если устройство встряхнуло.
На основании комментариев - чтобы проверить это:
Ноты:
Акселометр должен быть деактивирован на паузе и активирован на резюме для экономии ресурсов (процессор, батарея). Код предполагает, что мы находимся на планете Земля ;-) и инициализирует ускорение до гравитации Земли. В противном случае вы получите сильную «дрожь», когда приложение запускается и «падает» на землю от свободного падения. Тем не менее, код привыкнет к гравитации из-за фильтра низких частот и будет работать также на других планетах или в свободном пространстве после его инициализации. (вы никогда не знаете, как долго ваше приложение будет использоваться ... ;-)
источник
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
должна бытьmAccel = mAccel * 0.9f + delta * 0.1f; // perform low-cut filter
?Calendar last = Calendar.getInstance(); Calendar now = Calendar.getInstance(); last.setTime(last_date); now.setTime(new Date()); long diff = now.getTimeInMillis() - last.getTimeInMillis(); if(diff >= 750) { ... }
Имена методов должны быть правильными (у меня нет кода со мной ... )android.util.FloatMath.sqrt(x*x + y*y + z*z);
вместо этого, чтобы избежать преобразованияВот мой код для определения жестов дрожания:
Добавьте это в свою деятельность:
...
в onCreate () добавить:
и:
источник
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
в onCreate (). В остальном работает чудесно! Спасибо!Вот еще одна реализация, основанная на некоторых советах, а также на коде с сайта разработчиков Android.
MainActivity.java
ShakeDetector.java
источник
DoShake()
функции?Мне очень понравился ответ Петердака. Я взял на себя ответственность за внесение изменений в его код.
файл: ShakeDetector.java
Также не забывайте, что вам нужно зарегистрировать экземпляр ShakeDetector в SensorManager.
источник
SHAKE_THRESHOLD_GRAVITY
на 1.7F, чтобы читатели не думали, что этот ответ не работает, потому что им приходится сильно трястись из-за того, что значение составляет 2.7F .count
переменная onShake говорит вам , сколько раз встряхивают устройствоSystemClock.elapsedRealtime()
вместоSystem.currentTimeMillis()
и инициализировать mShakeTimestamp с тем же способом , а не с 0Я разрабатываю приложение для обнаружения движения и дрожания для моего университетского проекта.
Помимо первоначальной цели приложения, я разделяю библиотечную часть (отвечающую за обнаружение движения и дрожания) из приложения. Код бесплатный, доступен на SourceForge с названием проекта «BenderCatch». Документация, которую я создаю, будет готова примерно в середине сентября. http://sf.net/projects/bendercatch
Он использует более точный способ обнаружения сотрясения: наблюдает ОБА разницы сил между SensorEvents И колебаниями, присутствующими на осях X и Y, когда вы выполняете встряхивание. Он может даже издавать звук (или вибрировать) при каждом колебании дрожания.
Не стесняйтесь спрашивать меня по электронной почте на raffaele [at] terzigno [dot] com
источник
Я написал небольшой пример для обнаружения вертикальных и горизонтальных сотрясений и показа
Toast
.источник
Вы можете использовать сейсмику . Пример можно найти здесь .
источник
Я пробовал несколько реализаций, но хотел бы поделиться своим. Используется
G-force
как единица для расчета порога. Это немного облегчает понимание того, что происходит, а также с установкой хорошего порога.Он просто регистрирует увеличение силы G и запускает слушателя, если он превышает пороговое значение. Он не использует какие-либо пороговые значения направления, потому что вам это действительно не нужно, если вы просто хотите зарегистрировать хороший встряхиватель.
Конечно, вам нужна стандартная регистрация и UN-регистрация этого слушателя в
Activity
.Кроме того, чтобы проверить, какой порог вам нужен, я рекомендую следующее приложение (я никак не связан с этим приложением)
источник
Вот еще один код для этого:
источник
источник
источник
Shaker.java
MainActivity.java
Радоваться, веселиться.
источник
источник
Вы должны подписаться как
SensorEventListener
и получитьaccelerometer
данные. После того, как он у вас есть, вы должны следить за внезапным изменением направления (знака) ускорения на определенной оси. Это было бы хорошим показателем для'shake'
движения устройства.источник
Работая со мной v.good Ссылка
источник
Возможно, вы захотите попробовать с открытым исходным кодом tinybus . С этим обнаружение встряхивания так же просто, как это.
Он использует сейсмику для обнаружения встряхивания.
источник