English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Анализ методов использования приложений с функцией感应ного ввода в Android

Этот пример рассказывает о методе использования сенсора силы тяжести в программировании Android. Предоставляется для вашего рассмотрения, вот так:

Сенсор силы тяжести в основном реализуется с помощью датчика ускорения телефона (accelerometer)

В разработке Android используется всего восемь типов датчиков, но не все модели телефонов поддерживают эти датчики. Поскольку многие функции пользователи не считают важными, разработчики могут отключить некоторые функции. Поэтому необходимо разрабатывать в зависимости от实际情况 телефона. В данном разделе мы рассмотрим конкретное реализация датчика ускорения, и вот его имя:

Датчик ускорения (accelerometer)
Датчик гироскопа (gyroscope)
Датчик окружающей освещенности (light)
Датчик магнитного поля (magnetic field)
Датчик ориентации (orientation)
Датчик давления (pressure)
Датчик расстояния (proximity)
Датчик температуры (temperature)

1. Объект управления датчиками SensorManager

Все датчики в телефоне должны быть доступны через SensorManager, вызов метода getSystemService(SENSOR_SERVICE) позволяет получить объект управления датчиками текущего телефона.

2. Реализация интерфейса SensorEventListener

Нам нужно реализовать интерфейс SensorEventListener метод onSensorChanged(SensorEvent event), чтобы捕获手机传感器的状态,получить компоненты силы тяжести в направлениях X, Y и Z, и с этими данными мы уже изучили принцип работы датчика силы тяжести.

public void onSensorChanged(SensorEvent e) {
  float x = e.values[SensorManager.DATA_X];
  float y = e.values[SensorManager.DATA_Y];
  float z = e.values[SensorManager.DATA_Z];
};

Как показано в приведенном выше коде: значения float x, y, z в трёх направлениях находятся в диапазоне от -10 до 10. Объясним значение分量 гравитации осей X, Y, Z (здесь следует отметить, что начало координат: в сторону неба - положительное число, в сторону земли - отрицательное число, что противоречит координатам при программировании):

(1) Если экран телефона направлен влево, ось X направлена к небу, вертикально размещена, в этот момент оси Y и Z не имеют分量 гравитации, так как ось X направлена к небу, ее分量 гравитации максимальны. В этот момент значения分量 гравитации осей X, Y, Z составляют (10, 0, 0);

(2) Если экран телефона направлен вправо, ось X направлена к地面, вертикально размещена, в этот момент оси Y и Z не имеют分量 гравитации, так как ось X направлена к地面, ее分量 гравитации минимальны. В этот момент значения分量 гравитации осей X, Y, Z составляют (-10, 0, 0);

(3) Если экран телефона вертикально установлен, ось Y направлена к небу, вертикально размещена, в этот момент оси X и Z не имеют分量 гравитации, так как ось Y направлена к небу, ее分量 гравитации максимальны. В этот момент значения分量 гравитации осей X, Y, Z составляют (0, 10, 0);

(4) Если экран телефона вертикально установлен, ось Y направлена к地面, вертикально размещена, в этот момент оси X и Z не имеют分量 гравитации, так как ось Y направлена к地面, ее分量 гравитации минимальны. В этот момент значения分量 гравитации осей X, Y, Z составляют (0, -10, 0);

(5) Если экран телефона направлен вверх, ось Z направлена к небу, горизонтально размещена, в этот момент оси X и Y не имеют分量 гравитации, так как ось Z направлена к небу, ее分量 гравитации максимальны. В этот момент значения分量 гравитации осей X, Y, Z составляют (0, 0, 10);

(6) Если экран телефона направлен вверх, ось Z направлена к地面, горизонтально размещена, в этот момент оси X и Y не имеют分量 гравитации, так как ось Z направлена к地面, ее分量 гравитации минимальны. В этот момент значения分量 гравитации осей X, Y, Z составляют (0, 0, -10).

3. Регистрация SensorEventListener

Используя SensorMannager, вызовите метод getDefaultSensor(Sensor.TYPE_ACCELEROMETER), чтобы получить объект сенсора ускорения гравитации. Поскольку я обсуждаю сенсор ускорения гравитации, параметр составляет Sensor.TYPE_ACCELEROMETER, если вам нужно получить другие сенсоры, вам нужно передать соответствующее имя. Используйте метод registerListener() SensorMannager для регистрации, третий параметр - это чувствительность и точность детектирования, выберите точность в зависимости от ваших потребностей, для разработки игр рекомендуется использовать SensorManagerSENSOR_DELAY_ GAME.

4. Способ простого вычисления скорости с помощью гравитационного детектора

Каждый раз, когдаphone шатается, вычисляется компонент гравитации по осям X, Y, Z, который можно записать. Затем компонент гравитации при каждом шатании и компонент гравитации, записанный ранее, можно сравнить, используя разницу и время, чтобы вычислить их скорость движения.

Устройство управления гравитацией включает в себя три части: сенсор, процессор и контроллер. Сенсор отвечает за детектирование состояния накопителя, вычисление значения ускорения накопителя; процессор определяет, превышает ли ускорение безопасный диапазон; а контроллер отвечает за блокировку или разблокировку магнитной головки в безопасной стоянке. Как только сенсор детектирует и процессор определяет, что текущее ускорение гравитации превышает безопасное значение, контроллер останавливает чтение и запись магнитной головки с помощью аппаратного управления и быстро возвращается в专用 стоянку магнитной головки. Эта серия действий завершается в течение 200 миллисекунд. Когда сенсор детектирует, что ускорение возвращается в нормальный диапазон, продукт возвращается к работе.

Код Android多媒体фреймворка находится в следующем каталоге: external/opencore/. Этот каталог является корневым каталогом Androidмультимедийного фреймворка, и в нем содержатся следующие подкаталоги:

* android: это верхний уровень библиотеки, основанный на SDK PVPlayer и PVAuthor, реализующий Player и Author для Android
* baselibs: базовая библиотека, включающая структуры данных и线程овую безопасность
* codecs_v2: это библиотека с большим количеством контента, которая включает реализацию кодировщиков и декодировщиков, а также реализацию OpenMAX
* engines: реализация двигателей PVPlayer и PVAuthor
* extern_libs_v2: включает заголовочные файлы Khronos OpenMAX
* fileformats: классы анализаторов (parser) для конкретных форматов файлов
* nodes: различные классы node для кодирования и декодирования, а также файлового анализа
* oscl: библиотека совместимости с операционными системами
* pvmi: абстрактный интерфейс для управления вводом-выводом
* protocols: протоколы, связанные с сетью, такие как RTSP, RTP, HTTP и т.д.
* pvcommon: Android.mk file of the pvcommon library file, no source file
*pvplayer: Android.mk file of the pvplayer library file, no source file
* pvauthor: Android.mk file of the pvauthor library file, no source file
* tools_v2: Compilation tools and some registrable modules

The following is part of the test code:

private SensorManager sensorMgr;
Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//Save the coordinates of x, y, z from the last time
float bx = 0;
float by = 0;
float bz = 0;
long btime = 0;//This time
sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
SensorEventListener lsn = new SensorEventListener() {
  public void onSensorChanged(SensorEvent e) {
    float x = e.values[SensorManager.DATA_X];
    float y = e.values[SensorManager.DATA_Y];
    float z = e.values[SensorManager.DATA_Z];
    //After calculating the values of X, Y, Z, you can calculate the speed of摇晃 based on these values
    //Speed = Distance/Time
    //Speed along the X-axis
    float speadX = (x - bx) / (System.currentTimeMillis() - btime);
    //Speed along the y-axis
    float speadY = (y - by) / (System.currentTimeMillis() - btime);
    //Speed along the z-axis
    float speadZ = (z - bz) / (System.currentTimeMillis() - btime);
    //Such simple speed can be calculated, if you want to calculate acceleration, in kinematics, acceleration a is related to speed,
    // Все перемещения связаны: Vt=V0+at, S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a), на основе этой информации также можно вычислить a
    bx = x;
    by = y;
    bz = z;
    btime = System.currentTimeMillis();
  };
  public void onAccuracyChanged(Sensor s, int accuracy) {
  };
};
// Регистрация listener, третий параметр - точность детектирования
sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);

Читатели, заинтересованные в более подробной информации о Android, могут ознакомиться с темами на нашем сайте: «Введение в разработку Android и продвинутые руководства», «Суммарные навыки работы с Android View View», «Суммарные навыки работы с activity в Android», «Суммарные навыки работы с SQLite в Android», «Суммарные навыки работы с json-форматом данных в Android», «Суммарные навыки работы с базами данных в Android», «Суммарные навыки работы с файлами в Android», «Суммарные навыки работы с SD-картой в Android», «Суммарные навыки работы с ресурсами в Android» и «Суммарные навыки работы с контроллерами в Android»

Надеюсь, что описание в этой статье поможет вам в разработке Android-приложений.

Объявление: содержание этой статьи взято из Интернета, авторские права принадлежат их законным владельцам, контент предоставлен пользователями Интернета, сайт не имеет права собственности, не был обработан вручную, и не несет ответственности за связанные с этим юридические обязательства. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. Если факт будет подтвержден, сайт немедленно удалят материалы,涉嫌侵权.

Основной курс
Тебе может понравиться