10

Android プラットフォーム用のアプリケーションを作成していて、加速度計を使用したいと考えています。今、センサー シミュレーション用の非常に優れたアプリケーション ( OpenIntents の SensorSimulator ) を見つけましたが、やりたいことのために、独自のセンサー シミュレーター アプリケーションを作成したいと考えています。

これを行う方法に関する情報が見つかりませんでした (シミュレーターの jar の分解が正しいかどうかはわかりません)。前述したように、より小型で単純なバージョンのセンサー シミュレーターを構築したいと考えています。意図。

どこから始めればよいか分かりますか?ビルドする必要のあるコードはどこで確認できますか?

基本的に、私が求めているのは方向性だけです。

4

1 に答える 1

8

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

于 2009-06-30T04:18:08.747 に答える