Как создать симулятор сенсора для Android?
-
21-08-2019 - |
Вопрос
Я создаю приложение для платформы Android и хочу использовать акселерометр.Теперь я нашел очень хорошее приложение для моделирования датчиков (Сенсорный симулятор OpenIntents), но для того, что я хочу сделать, я хотел бы создать собственное приложение-симулятор датчика.
Информации о том, как это сделать, я не нашел (не знаю, корректна ли разборка баночки Симулятора) и, как я уже говорил, хотелось бы собрать уменьшенную и более простую версию симулятора сенсора, более подходящую для моего намерения.
Знаете, с чего мне начать?где я могу увидеть, какие фрагменты кода мне нужно создать?
По сути, все мои вопросы лишь о каком-то направлении.
Решение
Что ж, похоже, вы хотите создать приложение, которое будет эмулировать датчики на устройстве 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, который вы использовали раньше.