- Что такое встряхивание андроид
- Что такое встряхивание андроид
- Shake Detector для Android на RxJava
- Вступление
- Настройка проекта
- Подключаем RxJava к проекту
- Включаем поддержку лямбд
- Android N Developer Preview
- Retrolambda
- Observable
- Реактивная магия
- Использование
- Вывод
- Русские Блоги
- Заметки о программе встряхивания Android
- G-Trigger — запуск приложений встряхиванием коммуникатора
Что такое встряхивание андроид
Новые темы необходимо создавать только в корневом разделе! В дальнейшем они будут обработаны модераторами.
Если Вы выложили новую версию программы, пожалуйста, сообщите об этом модератору нажав на вашем сообщении кнопку «Жалоба».
Shake to Answer
версия: 1.3.6 Paid
Последнее обновление программы в шапке: 13.06.2011
Описание:
Ответ на вызовы путем встряхивания телефона! Отвечайте на телефонные звонки только встряхнув, без необходимости отвечать пальцем.
Пять уровней настройки чувствительности. Используйте два быстрых встряхивания для ответа.
Невозможно срабатывание от вибровызова.
Описание на английском:
Answer calls by shaking your phone! Answer your phone with only one hand without needing to slide to answer, slide to unlock, or grasp for buttons.
Safely answer incoming calls with only one hand while driving!
Five sensitivity settings. Use two quick shakes to answer.
What’s in version 1.3.6:
— no changelog provided
Скачать: версия: v1.3.6 PaidShaketoAnswerv136_Market_Militia_.apk ( 54.21 КБ )
v1.3.5 ShaketoAnswerv135_Market_Militia_.apk ( 54.13 КБ )
v1.3.4 ShaketoAnswerv134_Market_Militia_.apk ( 53.32 КБ )
v1.3.3 ShaketoAnswerv133.apk ( 52.77 КБ )
Сообщение отредактировал eutechnyx — 13.06.11, 15:26
Источник
Что такое встряхивание андроид
Краткое описание:
Запуск приложений по встряхиванию смартфона.
Описание:
Это про версия «Shake», без рекламы.
С помощью этого приложения, вам больше не придется включать экран и видеть приложение, например, камеры только тогда, когда это действительно необходимо!
Это приложение позволяет встряхнув телефоном вызвать различные действия! Даже если ваш экран выключен, вы можете встряхнуть его, и он будет работать!
• Запуск любого приложения, таких как Gmail, Facebook, Whatsapp и т.д.
• Включить фонарик.
• Контролировать музыкальный плеер: пропустить трек, включить плеер и т.д.
• Показать последние используемые приложения.
• Изменение режима звонка — повтор / вибрация / без звука.
• Развернуть строку состояния.
• Вкл / выкл экран.
• Вкл / выкл 3G.
• Вкл / выкл Wi-Fi.
• Вкл / выкл автоматический поворот экрана.
• Вкл / выкл автоматическую яркость.
• Вкл / выкл динамик (во время разговора).
• Вкл / выкл режим полета вкл / выкл.
• Вкл / выкл Bluetooth.
• Вкл / выкл GPS.
Вы можете потрясти телефон в горизонтальном или вертикальном положении, чтобы вызвать различные действия.
• Контроль уровня чувствительности датчика встряхивания.
• Встряска может работать даже при выключенном экране.
• Вы можете выбрать службу приложения при запуске телефона.
• Выбери свой любимый режим встряхивания: простой, или про
• Доступна вибрация обратная связь для сотрясения.
Требуется Android: 2.3+
Русский интерфейс: Нет
Скачать:
версия: 1.0.3 Shake Pro_1.0.3.apk ( 617.57 КБ )
версия: 1.0.3 Rus от opt_step http://4pda.to/forum/d…ke%2BPro_1.0.3_rus.apk
версия: 1.0.3 Rus от IndeecFOX http://4pda.to/forum/d…3_RUS_by_IndeecFOX.apk
Сообщение отредактировал vadeus — 14.12.15, 09:27
Источник
Shake Detector для Android на RxJava
Вступление
Началось все с того, что была поставлена задача отменять последнее действие в приложении при встряхивании устройства. Но как понять, что случилось это самое встряхивание? Через пару минут изучения вопроса стало ясно, что надо подписываться на события от акселерометра и дальше пытаться как-то определить, что устройство встряхнули.
Обнаружились и готовые решения. Все они были довольно похожи, но в чистом виде они меня не устраивали, и я написал собственный «велосипед». Это был класс, который подписывался на события от сенсора и менял свое состояние по мере их поступления. Потом пару раз я и мои коллеги подкручивали шестеренки этого велосипеда, и в результате он стал напоминать нечто из «Безумного Макса». Я пообещал, что, как выдастся свободное время, приведу это безобразие в порядок.
И вот, читая недавно статьи по RxJava, я вспомнил про эту задачу. «Хм, — подумал я, — RxJava выглядит очень подходящим инструментом для такого рода проблем». Не откладывая в долгий ящик, взял и написал решение на RxJava. Результат меня поразил: вся логика заняла 8 (восемь!) строк! Я решил поделиться своим опытом с другим разработчикам. Так появилась на свет эта статья.
Надеюсь, этот простой пример поможет принять решение тем, кто размышляет о применении RxJava в своих проектах.
Статья ориентирована на читателей, имеющих базовый опыт разработки под Android. Исходный код готового приложения можно посмотреть на GitHub.
Настройка проекта
Подключаем RxJava к проекту
Чтобы подключить RxJava, достаточно добавить в build.gradle
Примечание: RxAndroid дает нам Scheduler, который привязан к UI-потоку.
Включаем поддержку лямбд
RxJava лучше всего использовать с лямбдами, без них код становится трудночитаемым. На данный момент есть два варианта включить поддержку лямбд в Android проекте: использовать компилятор Jack из Android N Developer Preview или использовать библиотеку Retrolambda.
В обоих случаях надо прежде всего убедиться, что установлен JDK 8. Лично я использовал Retrolambda.
Android N Developer Preview
Для того чтобы использовать Jack из Android N Developer Preview, следуем инструкциям отсюда
Добавляем в build.gradle строки:
Retrolambda
Для подключения retrolambda следуем инструкциям от Эвана Татарки (англ. Evan Tatarka):
Обратите внимание, в оригинальных инструкциях рекомендуется подключить репозиторий Maven Central. В вашем проекте, скорее всего, уже используется jcenter, поскольку именно этот репозиторий указывается по умолчанию при создании проекта в Android Studio. Он уже содержит в себе необходимые нам зависимости, дополнительно подключать Maven Central не требуется.
Observable
Итак, у нас в проекте подключены все необходимые инструменты, можно начинать разработку.
При использовании RxJava все начинается с получения Observable.
Напишем фабрику, которая создает Observable, подписанный на события переданного сенсора с помощью метода Observable.create:
Теперь у нас есть инструмент для преобразования событий от любого сенсора в Observable. Но какой сенсор подходит лучше всего для наших целей? На скриншоте ниже первый график отображает показания сенсора TYPE_GRAVITY, второй график — TYPE_ACCELEROMETER, третий — TYPE_LINEAR_ACCELERATION. Видно, что сначала устройство плавно повернули, а затем резко встряхнули.
Нас интересуют события сенсора с типом Sensor.TYPE_LINEAR_ACCELERATION. Он содержит значения ускорения, из которых уже была вычтена составляющая земной гравитации.
Любопытно, что многие решения используют Sensor.TYPE_ACCELEROMETER и применяют high pass фильтрацию для того, чтобы убрать гравитационную составляющую. Если вы догадываетесь почему — прошу поделиться знанием в комментариях.
Реактивная магия
Теперь, когда у нас есть Observable с событиями от акселерометра, мы можем использовать всю мощь RxJava операторов.
Давайте посмотрим, как выглядит «сырая» последовательность событий:
Видим, что каждые 20 миллисекунд прилетает событие от датчика. Эта частота соответствует значению SensorManager.SENSOR_DELAY_GAME, которое было передано в качестве параметра samplingPeriodUs при регистрации SensorEventListener.
В качестве полезной нагрузки приходит значение ускорения по всем трем осям.
Нас интересуют только значения по оси X. Они соответствуют тому движению, которое мы хотим отслеживать. Некоторые решения используют значения ускорения по всем трем осям, поэтому срабатывают, например, когда устройство кладут на стол (значительное ускорение по оси Z при контакте со столом).
Создадим класс данных с интересующими нас значениями:
Конвертируем SensorEvent в XEvent и фильтруем события, у которых величина ускорения по модулю превышает определенный порог:
Чтобы увидеть события в логе, придется впервые потрясти устройство.
Вообще довольно забавно выглядит процесс отладки Shake Detection со стороны: сидит разработчик и все время трясет телефон. Не знаю, что при этом думают окружающие 🙂
В логе остались только события со значительным ускорением по оси X.
Теперь самое интересное: мы отслеживаем моменты, когда ускорение сменило знак. Попробуем понять, что это за момент. Например, сначала мы разгоняем руку с телефоном влево, ускорение при этом имеет отрицательную проекцию на ось X. Потом мы останавливаем руку — в этот момент проекция на ось X меняет знак на положительный. То есть на один взмах приходится одна смена знака проекции.
Для этого сначала мы сформируем скользящее окно, которое будет содержать каждое событие с предшествующим ему событием:
Отлично! Мы видим, что каждое событие сгруппировано с предыдущим, теперь легко можно отфильтровать пары событий с разными знаками ускорения:
Каждое событие теперь соответствует одному взмаху. Всего 4 оператора, и мы уже способны отслеживать резкие движения! Но не будем останавливаться, ведь если детектор будет срабатывать по одному взмаху, то возможны ложные срабатывания. Например, пользователь не собирался трясти устройство, а просто переложил его в другую руку. Решение простое — надо заставить пользователя встряхнуть устройство несколько раз в течение короткого отрезка времени. Вводим параметры SHAKES_COUNT = количество взмахов и SHAKES_PERIOD = интервал времени, за который надо успеть сделать необходимое количество взмахов. Экспериментальным путем выяснилось, что комфортные параметры составляют 3 взмаха за 1 секунду. Иначе возможны случайные срабатывания, либо приходится совсем уж яростно сотрясать телефон.
Итак, мы хотим отследить момент, когда за одну секунду произошло 3 взмаха.
Заметим, что нам больше не нужны значения ускорения, оставим только время возникновения события, заодно переведем время из наносекунд в секунды:
Затем применим уже знакомый прием со скользящим окном. Для каждого события мы будем возвращать массив, содержащий это событие и два предыдущих:
И, наконец, оставим только те тройки событий, которые уложились в 1 секунду:
Если событие прошло последний фильтр, значит, за последнюю секунду пользователь 3 раза взмахнул устройством.
Но предположим, что наш пользователь увлекся и продолжает старательно трясти телефон. Тогда мы будем получать события на каждый следующий взмах, а нам хочется получать событие только на каждые 3 взмаха. Простым решением станет игнорирование событий в течение 1 секунды после того, как был определен жест.
Готово! Теперь полученный Observable можно использовать там, где мы хотим ждать события встряхивания.
Вот итоговый код для создания Observable:
Использование
В примере я воспроизвожу звук при наступлении события.
В Activity, где мы хотим слушать встряхивания, добавим поле:
Инициализируем его в onCreate:
Подпишемся на события в onResume:
И не забудем отписаться в onPause:
Вывод
Как видно, мы смогли в нескольких строках написать решение, которое надежно определяет заданный нами жест. Код получился компактный, его легко читать и поддерживать. Сравните с решением без применения RxJava, скажем, Seismic от Джейка Уортона (англ. Jake Wharton). RxJava — прекрасный инструмент, и если его применять умело и по делу, то можно получить отличные результаты. Надеюсь, что эта статья подтолкнет вас к изучению RxJava и применению в своих проектах подходов реактивного программирования.
Источник
Русские Блоги
Заметки о программе встряхивания Android
Из-за небольшой небрежности во время использования я боролся почти сутки, только с двумя исключениями:
1.view not attach to the window manager
2.timertask is scheduled already
Следующие причины анализа:
Так как я делаю проект скриншота, есть кнопка наведения, чтобы сделать скриншот. Когда я использую встряску, чтобы сделать скриншот, кнопку наведения нужно удалить из WindowManager. Первое удаление — нормальное, но второе дрожание Появляется аномалия 1 Это было довольно странно, и я обнаружил это непреднамеренно. Когда я встряхиваю его во второй раз, я дважды вызываю команду remove, и я действительно хочу прояснить ситуацию.
Мое плавающее окно фактически создается в intentservice, поэтому приведенный выше код будет вызываться каждый раз onhandleintent, поэтому нормально встряхивать в первый раз, а во второй раз уже есть shakeEventController. Зарегистрированный датчик ACCELEROMETER, а затем вызвать этот код здесь, есть два датчика, прослушивающие событие включения, поэтому, когда обрабатывается второе событие включения, btnScreenShot был удален из оконного менеджера, поэтому выдается исключение довольно часто: view not attach to the window manager。
Второе исключение, по той же причине, это событие было обработано дважды, и почти в одно и то же время, когда одна таймерная задача не завершена, а другое расписание должно вызвать исключение: таймерная задача уже запланирована
Источник
G-Trigger — запуск приложений встряхиванием коммуникатора
Не зря говорят что лень — двигатель прогресса. Кому-то надоело перемещаться по меню, нажимая кнопки и он придумал сенсорный экран. Но и эта задумка оказалась несовершенна. Был создан пальцеориентирванный интерфейс, чтобы не утруждаться вытаскиванием стилуса и попаданием им по пунктам меню. А теперь есть программа G-Trigger, благодаря которой для управления коммуникатором достаточно просто тряхнуть его в нужном направлении.
Программа определяет встряхивания в следующих направлениях:
— горизонтально слева направо
— горизонтально справа налево
— вертикально снизу вверх
— вертикально сверху вниз
Поддерживается выполнение действий:
— свернуть/закрыть активное окно
— ответ/отбой входящего вызова
— переключение режимов звонок / вибрация / без сигналов
— смена ориентации экрана
— включение / отключение экрана
— Управление состоянием Wi-Fi, Bluetooth и радио- модуля
— имитация функций кнопки питания
— и многое другое!
Поддерживается управление проигрывателями:
— Windows Media Player
— вкладка «музыка» в Manila
Совместимость:
Программа разрабатывалась и тестировалась для HTC Touch Diamond, но, судя по отзывам, поддерживает также HTC Touch HD и Touch Pro. Работа на других устройствах не исключается.
Системные требования: Windows Mobile 5 — 6.1
Дополнительные требования: G-Sensor
Русский язык: нет
Тип: САВ
Размер: 539kb
Скачать G-Trigger v0.9.1!
Заметили ошибку? Выделите её и нажмите Ctrl+Enter или сообщите здесь.
Источник