さて、あなたが作りたいのは、エミュレーターでテストしながら、アプリケーションの 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 の代わりにそのオブジェクトを使用できるようになりました。