Как построить симулятор датчика для Android? - PullRequest
10 голосов
/ 29 июня 2009

Я создаю приложение для платформы Android и хотел бы использовать акселерометр. Теперь я нашел очень хорошее приложение для симуляции сенсора ( SensorSimulator OpenIntents ), но для того, что я хочу сделать, я хотел бы создать собственное приложение симулятора сенсора.

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

Ты знаешь, с чего мне начать? где я могу увидеть, какие части кода мне нужно собрать?

По сути, все мои просьбы о каком-то направлении.

1 Ответ

8 голосов
/ 30 июня 2009

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

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

Почему бы не создать интерфейс с методами, которые вы используете из SensorManager:

interface MySensorManager {
    List<Sensor> getSensorList(int type);

    ... // You will need to add all the methods you use from SensorManager here
}

А затем создайте оболочку для SensorManager, которая просто вызывает эти методы для реального объекта SensorManager:

class MySensorManagerWrapper implements MySensorManager {
    SensorManager mSensorManager;

    MySensorManagerWrapper(SensorManager sensorManager) {
        super();
        mSensorManager = sensorManager;
    }

    List<Sensor> getSensorList(int type) {
         return mSensorManager.getSensorList(type_;
    }

    ... // All the methods you have in your MySensorManager interface will need to be defined here - just call the mSensorManager object like in getSensorList()
}

А затем создайте еще один MySensorManager, который на этот раз сообщается через сокет с настольным приложением, которое вы создадите, где вы вводите значения датчика или что-то в этом роде:

class MyFakeSensorManager implements MySensorManager {
    Socket mSocket;

    MyFakeSensorManager() throws UnknownHostException, IOException {
        super();
        // Connect to the desktop over a socket
        mSocket =  = new Socket("(IP address of your local machine - localhost won't work, that points to localhost of the emulator)", SOME_PORT_NUMBER);
    }

    List<Sensor> getSensorList(int type) {
        // Use the socket you created earlier to communicate to a desktop app
    }

    ... // Again, add all the methods from MySensorManager
}

И, наконец, замените первую строку:

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

С новой строкой:

MySensorManager mSensorManager;
if(YOU_WANT_TO_EMULATE_THE_SENSOR_VALUES) {
    mSensorManager = new MyFakeSensorManager();
else {
    mSensorManager = new MySensorManagerWrapper((SensorManager)getSystemService(SENSOR_SERVICE));
}

Теперь вы можете просто использовать этот объект вместо SensorManager, который вы использовали ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...