質問

私は、Androidプラットフォーム用のアプリケーションを構築していると私は、加速度計を使用したいと思います。今、私はセンサーシミュレーションのための非常に素晴らしいアプリケーションを発見した( OpenIntentsソフトSensorSimulatorする )しかし、私がやりたいことのために、私自身のセンサシミュレータアプリケーションを作成したいと思います。

私はこれを行う方法についての情報を見つけていない(シミュレータのjarファイルが正しい解体場合、私は知らない)と、私が言ったように、私は、センサシミュレータの小さい方や簡単なバージョンを構築したいと思い、もっと私の意図に適しています。

私はどこを開始することができ、あなたが知っていますか?どこで私が構築するために必要なコードの断片が何であるかを見ることができますか?

基本的に、すべての私はいくつかの方向を求めています。

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top