Статьи

Управление сенсорами в Android, мистер Браун Кан Му

В комплект для разработки Android входят отличные эмуляторы, позволяющие тестировать приложения так, как они будут эмулироваться на устройстве. Здесь есть одна загвоздка: не все функции доступны в эмуляторе, как в реальном устройстве. Это становится очевидным, когда вы начинаете разрабатывать приложения для возможных камер или даже датчиков ускорения, компаса или ориентации. Вы не можете просто взять свой компьютер, наклонить и переместить его, мы знаем, что это не работает. В этой статье объясняется, как преодолеть эти недостатки эмулируемой среды.

Некоторые, возможно, видели приложение для iPhone под названием «Can Moo». Это настоящая игрушка «Корова в жестяной банке», с которой мы, дети, выросли, и если вы перевернете ее; можно услышать коровье му. Это приложение, которое продемонстрирует, как воссоздать эту игрушку на Android, является побочным продуктом доктора Сьюсса под названием «Мистер Мистер Сьюз». Браун в банке ». «Мистер. Brown Can Moo, Can You »- причудливая игра, которая учит детей различным звукам, которые издают животные.

Требования этого приложения являются разумными, чтобы играть в коровьего му. Способность определять, когда сенсор телефона был отклонен за определенную точку, чтобы вызвать этот звук. Последнее требование для эмулируемой среды Android, которая будет использовать OpenIntents. Это проект GoogleCode, который позволяет управлять данными датчика через http. Его можно найти по адресу http://code.google.com/p/openintents/ Загрузить бета-версию симулятора датчиков 1.0 http://code.google.com/p/openintents/downloads/detail?name=sensorsimulator-1.0.0 -beta1.zip & can = 2 & q = и распакуйте его в папку.

Также предполагается, что среда разработки — это Eclipse с Android SDK и уже установленными и настроенными плагинами.

Запустите этот проект, выбрав New → Android Project. Название проекта «MrBrown». Выберите Android 1.6, вы можете выбрать другие, но убедитесь, что вы также настроили соответствующий эмулятор для вашей версии проекта. Выбранное имя приложения было «MrBrownCanMoo». Затем выберите название пакета по вашему выбору. Наконец, в поле «Тип деятельности» введите «MooCan» и нажмите «Готово». Это создаст простое стартовое приложение «HelloWorld».

 

Если вы не создали эмулятор для своей версии проекта, создайте его с помощью «Android SDK and AVD Manager». Используя плагин Eclipse, это значок смартфона на панели инструментов. Когда он будет создан, запустите эмулятор, выбрав виртуальное устройство и нажав кнопку «Пуск».

 

 

После запуска эмулятора перейдите в место, где был извлечен бета-файл датчика симулятора 1.0, а в папке / папке находится файл «SensorSimulatorSettings.apk». Это должно быть установлено в виртуальном устройстве.

Для этого просто используйте команду: % ANDROID_SDK_HOME% / tools / adb install SensorSimulatorSettings.apk

Результатом должно быть сообщение об успехе в командной строке. Если нет, то это может быть потому, что вы разблокировали экран на эмуляторе.

Перейдите на экран приложения эмулятора, и вы должны увидеть приложение «Sensor Simulator», и выберите его. Следующий шаг включает настройку симулятора датчиков, который выглядит как фазер Star Trek.

 

В том же директоре, который вы ввели в команду AVD для установки файла SensorSimulatorSettings.apk, вы можете найти файлENSimulator.jar. Введите следующую команду: java -jar sensorimulator.jar

Запустится приложение Swing и начнется прослушивание сокета порта. Это может быть изменено по мере необходимости для вашей среды.

 

Вернитесь к эмулятору Android и щелкните приложение Sensor Simulator, если вы еще этого не сделали. Это открывает экран настроек. Введите IP-адрес, который отображается в приложении Swing, и номер порта, по умолчанию используется порт 8010. Вы не можете использовать localhost или 127.0.0.1, это должен быть ip-адрес компьютера. Это потому, что эмулятор имеет свой собственный внутренний шлейф.

Нам нужно проверить, работают ли приложение-симулятор Swing и Sensor Simulator в эмуляторе Android. Перейдите на вкладку тестирования и нажмите кнопку «Подключиться». Если все проверено, у вас должны быть флажки ориентации, акселерометра и магнитного поля. Нажмите на ориентацию. Мы можем игнорировать частоту обновления на данный момент. Это больше используется для разработки игр.

 

Вернитесь в приложение Swing Sensor Simulator, и вы можете либо щелкнуть и перетащить 3d-изображение устройства Android, либо использовать ползунки рыскания, тангажа и крена рядом с ним. В любом случае, когда вы перемещаете настройки в приложении-симуляторе Sensor Simulator, вы также должны видеть, как меняются цифры в приложении-симуляторе Android-симулятора.

Теперь вы можете выключить эмулятор. Это будет то, как приложение, которое мы разработаем, сможет «чувствовать» движение в эмулируемой среде.

Приложение будет довольно простым. Разница лишь в том, что когда он будет готов к развертыванию в реальном устройстве, необходимо отключить несколько строк кода, чтобы убедиться, что мы используем датчик фактического устройства, а не эмулируем его.

Первый шаг — дать приложению, которое мы разрабатываем, разрешение на использование Интернета. Это опять-таки потому, что мы используем порт для общения с приложением Sensor Simulator. Поэтому добавьте эту строку в AndroidManifest.xml внутри тегов <manifest>.

< Использования разрешения Android: имя = «android.permission.INTERNET» > </ использование разрешения >

Следующие ресурсы изображений добавляются в папку res / drawable /.

Это значок изображения и изображение приложения.

Давайте изменим основной макет по умолчанию, который имеет только текст, в res / layout /. Мы удалим объект TextView и добавим объект ImageView, ссылающийся на «can».

разреш / макет / main.xml
 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/mrbrowncan"></ImageView>
</LinearLayout>

   В конечном итоге это приложение будет использовать Android api SensorManager, но для его тестирования нам придется использовать SensorSimulator. Мы также должны будем импортировать ссылку на sensorimulator-lib.jar в нашем проекте Eclipse, который находится в каталоге lib / папки beta simulator sensor simulator 1.0. Объявите SensorManager и SensorManagerSimulator с одинаковым именем переменной и закомментируйте SensorManager следующим образом:

//SensorManager sm = null;
SensorManagerSimulator sm = null;

  Обратите внимание, что SensorManagerSimulator также нуждается в sm.connectSimulator (). Фактический SensorManager не нуждается в этом вызове. Когда пришло время выпустить на фактическое устройство, вы раскомментируете строку SensorManager и закомментируете две строки в SensorManagerSimulator.

     // get reference to SensorManager
//sm = (SensorManager) getSystemService(SENSOR_SERVICE);
sm = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
sm.connectSimulator();

Чтобы прослушать изменения в SensorManger, мы должны реализовать SensorListener, а затем зарегистрировать слушателя у менеджера. Есть два метода, которые могут быть переопределены в объекте android Activity. Методы onResume () и onStop (). Они оба являются частью жизненного цикла Activity приложения для Android. В onResume () мы зарегистрируем слушателя датчика, а затем onStop () отменим слушателя. Это выглядит так:

        @Override
protected void onResume() {
super.onResume();
// register this class as a listener for the orientation and
// accelerometer sensors
sm.registerListener(this, SensorManager.SENSOR_ORIENTATION
| SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onStop() {
// unregister listener
sm.unregisterListener(this);
super.onStop();
}

Реальная работа приложения будет происходить во время событий SensorListening в вызове onSensorChange. Мы будем работать с осью основного тона, так как имеет больше смысла наклонять верхнюю часть телефона вниз и обратно, как игрушку «корова в жестяной банке». Крен и рыскание для такой игрушки не вызывают звука коровы.

Кроме того, нам нужно загрузить медиаплеер, чтобы при выходе датчика за пределы определенного шага проигрыватель воспроизводил звук коровы. WAV-файл предоставляет нам ресурс для звука. Это будет помещено в папку res / raw /. Создать медиаплеер очень просто:

mp = MediaPlayer.create(this, R.raw.cow_toy);

 
Значения представляют собой массив чисел с плавающей точкой. Элемент [1] в массиве представляет наш шаг. Элемент [0] — рыскание, а элемент [2] — рулон для датчика ориентации.

Как только значение шага превышает 25 градусов или меньше 91 градуса, что указывает за плоскость уровня 0, проигрыватель мультимедиа начинает воспроизведение. Это будет указывать на переход в вертикальное положение. То же самое верно для -20 градусов как нисходящее положение высоты Снова медиаплеер создан и воспроизводит звук коровы.

Полный код должен выглядеть следующим образом:

import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

import android.app.Activity;
import android.hardware.SensorListener;
import android.hardware.SensorManager;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;

public class MooCan extends Activity implements SensorListener {
//SensorManager sm = null;
SensorManagerSimulator sm = null;
MediaPlayer mp;

boolean flip = false;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// get reference to SensorManager
//sm = (SensorManager) getSystemService(SENSOR_SERVICE);
sm = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
sm.connectSimulator();
mp = MediaPlayer.create(this, R.raw.cow_toy);
}

public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
if (sensor == SensorManager.SENSOR_ORIENTATION) {
if (values[1] > 25 && values[1] < 91) {
if (!mp.isPlaying() && flip == false) {
try {
mp = MediaPlayer.create(this, R.raw.cow_toy);
mp.start();
flip = true;
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} else if (values[1] < -20) {
if (!mp.isPlaying() && flip == true) {
mp = MediaPlayer.create(this, R.raw.cow_toy);
mp.start();
flip = false;
}
}
}
}
}

public void onAccuracyChanged(int sensor, int accuracy) {
}

@Override
protected void onResume() {
super.onResume();
// register this class as a listener for the orientation and
// accelerometer sensors
sm.registerListener(this, SensorManager.SENSOR_ORIENTATION
| SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onStop() {
// unregister listener
sm.unregisterListener(this);
super.onStop();
}
}

На этом этапе у вас должно быть запущено приложение Swing Sensor Simulator: java -jar sensorimulator.jar. Затем запустите приложение из вашей Eclipse IDE. Либо сдвиньте ползунок высоты тона в приложении качания, либо поверните изображение каркасного устройства в приложении качания датчика симуляции. В определенный момент звук коровы должен сработать.

Чтобы развернуть на фактическое устройство Android, вам просто нужно раскомментировать строку для создания экземпляра SensorManager и закомментировать строки для SensorManagerSimulator и его линии connectSimulator. Остальная часть кода остается прежней.

Это очень простое приложение, чтобы продемонстрировать, как можно протестировать и создать приложение для Android, которое использует ориентацию датчика и акселерометр через эмулятор. Подобно тому, как другие части физических устройств в эмуляторе Android недоступны, это одно из решений, позволяющее вам тестировать и разрабатывать конечный продукт.

MrBrown source.zip