2013-05-01 30 views
0

对不起,愚蠢的问题,但我是新来的android和我找不到解决方案。从非活动类获取数据执行sensoreventlistener

简而言之,我有一个使用sensoreventlistener的课程,我想使用从主要活动中的传感器接收的数据。我试过,但没有成功 这里我的代码:

public class Lis{ 

SensorManager MagSensorManager; 
SensorManager ACCSensorManager; 
Sensor magnetometer; 
Sensor Accelerometer; 
Callback cb =null; 
float [] magvec =new float[3]; 
float [] lin =new float[3]; 





Lis(Context context, Callback cb) 
{ 

    MagSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 
    ACCSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 

    ACCSensorManager.registerListener(listener,Accelerometer, SensorManager.SENSOR_DELAY_GAME); 
    MagSensorManager.registerListener(listener,magnetometer, SensorManager.SENSOR_DELAY_GAME); 
    this.cb=cb; 
} 
SensorEventListener listener = new SensorEventListener() { 

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

} 
public void onSensorChanged(SensorEvent event) { 

    switch (event.sensor.getType()) 
    { 
    case Sensor.TYPE_MAGNETIC_FIELD: 
     magvec = event.values.clone(); 
     break; 
    case Sensor.TYPE_LINEAR_ACCELERATION: 
     lin = event.values.clone(); 
     break; 

    } 



      SensorManager.getRotationMatrix(Ri, I, lin, magnetic); 
     SensorManager.getOrientation(Ri, orientat); 
       orientat[0] = (float) Math.toDegrees(orientat[0]); 
      cb.azvalue(orientat[0]); 

} 
} 

}; 



public interface Callback { 
     void azvalue(float azim); 

    } 

}


公共类MainActivity扩展活动实现Lis.Callback {

TextView tbX; 

    Lis listen; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tbX = (TextView)findViewById(R.id.textView1); 
     listen=new Lis(this,this); 
    }  


    @Override 
    protected void onPause() { 
     super.onPause(); 

    } 
    public void azvalue(float azim) 
    { 
     tbX.setText("azimuth"+azim); 
    } 

}

上午在哪里我错了?如果我尝试运行apk,我只从tbX textview获取默认文本,而不是“方位角”+值。

在此先感谢。

+1

使用一个处理器用于此目的 – Raghunandan 2013-05-01 13:33:02

回答

0
SensorManager MagSensorManager; 
SensorManager ACCSensorManager; 

你只需要一个的SensorManager

SensorManager mSensorManager; 

在构造

Lis(Context context, Callback cb) 
{ 

    mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 

    // You need to initialize these value, otherwise you pass in null 
    // and onSensorChanged would not be called as in your case. 
    magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 
    Accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

    mSensorManager.registerListener(listener,Accelerometer, SensorManager.SENSOR_DELAY_GAME); 
    mSensorManager.registerListener(listener,magnetometer, SensorManager.SENSOR_DELAY_GAME); 
    this.cb=cb; 
}