2009-06-29 13 views
10

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

私はこれを行う方法に関する情報を見つけられませんでした(シミュレータのジャーナルが正しいかどうか分かりません)。私が言ったように、センサシミュレータの小型化とシンプルなバージョンを作りたいと思います。私の意図にもっと適しています。

どこから始めればいいですか?ビルドする必要があるコードはどこにありますか?

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

答えて

8

これは、エミュレータでテストしているときに、アプリケーション用のAndroidデバイスのセンサーをエミュレートするアプリケーションです。
はおそらく、あなたのアプリケーションでは、次のような行ている:あなたはSensorManagerから使用するメソッドを持つインタフェース

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

を作成しない理由:

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); 

をあなたはセンサ値か何かを入力する場所作成するデスクトップアプリケーションへのソケット経由nicates

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

これまで使用していたSensorManagerではなく、そのオブジェクトを使用することができます。

+1

こんにちは!ご回答有難うございます。それは私が構築したいと思っているものです。私はそれを試してみて、それがどのようになったのか皆に知らせることにします。 =) – Hugo

+0

こんにちは、これまでにソリューションを実装しましたか?私は最近それを試して問題に遭遇しましたが、新しいSensorEventオブジェクトを作成する必要がありましたが、SensorEventクラスの最後の値を設定することはできません。私がリフレクションで設定することでこれを回避しようとしたとき、SensorEventにClassNotFoundエラーが発生しました、私がcorretlyを覚えていれば... – andreas

関連する問題