2011年1月25日火曜日

Sensor Simulatorを利用してセンサの動作を確認する<使用編> - Confirming the behavior of sensor using Sensor Simulator (Using) -

このエントリーをはてなブックマークに追加
Sensor Simulatorを利用してAndroidアプリのセンサの動作を確認するために,ソースコードをそれ用に修正する必要があります.ここでは傾きセンサの値を計測する実機用のソースコードをSensorSimulator用のソースコードへと修正します.

To confirm the behavior of the sensor in Android application, we must correct the source code for it. So we correct the souce code from it for real machine to it for Sensor Simulator.




jarファイルの追加
1.「sensorsimulator-1.1.0-rc1/lib/sensorsimulator-lib-1.1.0-rc1.jar」をeclipse上のプロジェクト(ここではLayoutTest)にコピー.

2.[プロジェクト・エクスプローラ]の[LayoutTest]プロジェクトを右クリックし,[ビルド・パス]→[ビルド・パスの構成]を選択.
→[LayoutTestのプロパティー]画面が表示される.

3.[ライブラリー」タブ→[Jar追加]ボタンをクリック.
→[Jarの選択]画面が表示される.

4.[LayoutTest]→[sensorsimulator-lib-1.1.0-rc1.jar]を選択し[OK]ボタンをクリック.

5.[LayoutTestのプロパティー]画面の[OK]ボタンをクリック.


AndroidManifest.xmlの修正
1.「AndroidManifest.xml」のapplicationタグの前に次の文を追加.

(インターネットへのアクセスを許可するための文)


ソースコードの編集
傾きセンサの方位,ピッチ,ロールを計測するに載せたソースコードをSensorSimulator用に書き換えています.大きく次の点を変更しました.

1.Sensor,SensorEvent,SensorEventListener,SensorManagerに対応するsensorsimulator用のそれらをインポート.
2.SensorManagerをSensorManagerSimulatorとして扱うように変更.
3.SensorSimulatorに接続する処理を追加.
4.リスナの登録処理を変更.
5.SensorEventのセンサタイプ判断変更.


/LayoutTest/src/org/example/layout/Alfa.java
package org.example.layout;

import java.util.List;

//追加
import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;

import android.app.Activity;
//import android.hardware.Sensor;
//import android.hardware.SensorEvent;
//import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;

public class Alfa extends Activity implements SensorEventListener{
     private boolean registeredSensor = false;
     //private SensorManager sensorManager;
     private SensorManagerSimulator sensorManager; //追加

     @Override
     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.alfa);

          //sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

          //追加
          sensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
          sensorManager.connectSimulator();
     }

     @Override
     protected void onResume() {
          super.onResume();
//          List sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
//          if (sensors.size() > 0) {
//               Sensor sensor = sensors.get(0);
//
//               registeredSensor = sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
//          }

          //追加
          registeredSensor = sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_FASTEST);
     }

     @Override
     protected void onPause() {
          if (registeredSensor) {
               sensorManager.unregisterListener(this);
               registeredSensor = false;
          }

          super.onPause();
     }

     public void onAccuracyChanged(Sensor arg0, int arg1) {
     }

     public void onSensorChanged(SensorEvent event) {
          //if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
          if (event.type == Sensor.TYPE_ORIENTATION) { //追加
               Log.v("ORIENTATION", String.valueOf(event.values[0]) + ", " +
                         String.valueOf(event.values[1]) + ", " +
                         String.valueOf(event.values[2]));
          }
     }
}

実行結果
上記のアクティビティを起動し,Sensor Simulatorの携帯画像をマウスでグリグリ動かした結果は次のようになりました.LogCatのメッセージに方向,ピッチ,ロールの値がマウスの動きに合わせて変化していることが確認できました.



参考URL
SensorSimulator(コーディング編)

0 件のコメント:

コメントを投稿