2011-06-18 9 views
2

CompassAppという名前のアプリケーションを作成しています。 Compass.javaとRose.javaの2つのクラスを作成しました。このアプリケーションは、Webサイトで説明されているチュートリアルから作成されました。これは、廃止予定のバージョンのSensorListenerを使用しています。クラスCompass.javaはこの非推奨バージョンを使用しています。非難されたバージョンを使用したとき、アプリは正常に機能しました。それから私は、私のアプリをSensorEventListenerである現在のバージョンに変換することを考えました。しかし、コンパスの回転が止まった!私は立ち往生して何をすべきかわからない。私を助けてください。SensorListenerを使用するプログラムをSensorEventListenerに変換する方法

非推奨SensorListenerインターフェース新しいSensorEventListener

 public class Compass extends Activity{ 
      SensorManager sensorManager; 
      SensorEventListener listener ; 

      static final int sensor = SensorManager.SENSOR_ORIENTATION; 
      Rose rose; 

      /** Called when the activity is first created. */ 
      @Override 
      public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      // Set full screen view 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 

      listener = new SensorEventListener() 
      { 
       @Override 
      public void onSensorChanged(SensorEvent e) 
      { 
       int orientation = (int) e.values[0]; 
       rose.setDirection(orientation); 
      } 

      @Override 
      public void onAccuracyChanged(Sensor arg0, int arg1) { 
     // TODO Auto-generated method stub 

     } 
     }; 


     setContentView(rose); 

     // get sensor manager 
     sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
     sensorManager.registerListener(listener,  sensorManager.getDefaultSensor(sensor),SensorManager.SENSOR_MAGNETIC_FIELD); 

     } 

     // register to listen to sensors 
     @Override 
     public void onResume() { 
     super.onResume(); 
     sensorManager.registerListener(listener, sensorManager.getDefaultSensor(sensor), SensorManager.SENSOR_MAGNETIC_FIELD); 
     } 

     // unregister 
     @Override 
     public void onPause() { 
     super.onPause(); 
     sensorManager.unregisterListener(listener); 
     } 
    } 

答えて

4

public class Compass extends Activity implements SensorListener { 
    SensorManager sensorManager; 
    static final int sensor = SensorManager.SENSOR_ORIENTATION; 
    MyRose rose; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Set full screen view 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    rose = new MyRose(this); 

    setContentView(rose); 

    // get sensor manager 
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    } 

    // register to listen to sensors 
    @Override 
    public void onResume() { 
    super.onResume(); 
    sensorManager.registerListener(this, sensor); 
    } 

    // unregister 
    @Override 
    public void onPause() { 
    super.onPause(); 
    sensorManager.unregisterListener(this); 
    } 

    // Ignore for now 
    public void onAccuracyChanged(int sensor, int accuracy) { 
    } 

    // Listen to sensor and provide output 
    public void onSensorChanged(int sensor, float[] values) { 
    if (sensor != Compass.sensor) 
     return; 
    int orientation = (int) values[0]; 
    rose.setDirection(orientation); 
    } 
} 

Compass.javaとCompass.java私は、これは何が必要だと思います。

public class Compass extends Activity implements SensorEventListener { 
    SensorManager sensorManager; 
    static final int sensor = SensorManager.SENSOR_ORIENTATION; 
    MyRose rose; 
    private Sensor myCompassSensor; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Set full screen view 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    rose = new MyRose(this); 

    setContentView(rose); 

    // get sensor manager 
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    // get compass sensor (ie magnetic field) 
    myCompassSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 
    } 

    // register to listen to sensors 
    @Override 
    public void onResume() { 
    super.onResume(); 
    sensorManager.registerListener(this, myCompassSensor, SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    // unregister 
    @Override 
    public void onPause() { 
    super.onPause(); 
    sensorManager.unregisterListener(this); 
    } 

    // Ignore for now 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 
    } 

    public void onSensorChanged(SensorEvent event) { 
     // this check is unnecessary with only one registered sensor 
     // but it's useful to know in case you need to add more sensors 
     if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 
      int orientation = (int) event.values[0]; 
      rose.setDirection(orientation); 
     } 
    } 
} 

編集:追加のセンサタイプを決定するためのチェック

+0

'静的最終int型sensor'は、上記で使用されていません。注意するだけで、 'Sensor.TYPE_MAGNETIC_FIELD'の代わりに' Sensor.TYPE_ORIENTATION'を使うこともできます。 – Nux

+0

'Sensor.TYPE_ORIENTATION'はAPIレベル8以降では非推奨です。 –

関連する問題