如何使用传感器结果创建单独的类

时间:2014-11-17 17:48:36

标签: java android sensor android-sensors

我有简单代码的问题:在mainActivity我需要检查传感器,例如光传感器是否在手机上可用,如果可用,我需要reed并在屏幕上显示这个senson的结果,但代码负责读取来自传感器的数据必须在单独的类中。我编写了简单的代码,但它不起作用。当我运行此代码时,我的手机只显示我:"亮度等级:0.0"。我是编程的初学者,所以请帮助我..

主要课程:

公共类MainActivity扩展了Activity {

LightSensor mLightSensor = null;
protected SensorManager mSensorManager;


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

    TextView wyswietl = (TextView)findViewById(R.id.res);

    mLightSensor = new LightSensor();

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

    if (mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT) != null){
        LightSensor lS = new LightSensor();

        wyswietl.setText("Light level: " + Float.toString(lS.lux));
    }
    else{

    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
protected void onResume(){
    super.onResume();
    mLightSensor.register();
}

@Override
protected void onPause(){
    super.onPause();
    mLightSensor.unregister();
}

}

和LightSensor类:

公共类LightSensor实现SensorEventListener {

SensorManager mSensorManager;
Sensor lightManager;
public float lux;

public Context context;

public void onCreateLight(Context context){
    this.context = context;
    mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
    lightManager = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);


}

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

}


@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    lux = event.values[0];

}

public void register(){
    mSensorManager.registerListener(this, lightManager, SensorManager.SENSOR_DELAY_NORMAL);
}

public void unregister(){
    mSensorManager.unregisterListener(this);
}

}

2 个答案:

答案 0 :(得分:0)

我还没有对它进行测试,但您可以在LightSensor类中创建一个新方法,将lux变量返回给主类 类似的东西:

public float getLux(){
   return lux;
}

然后在你的" MainActivity"你可以致电的课程

float newLux = mLightSensor.getLux();

如果它不起作用,我可能会有一个稍微复杂的解决方案。

答案 1 :(得分:0)

你永远不会调用mLightSensor.onCreateLight();

如何将onCreateLight更改为LightSensor类'构造函数。这样可以解决问题而不需要你记得调用onCreateLight。

public LightSensor(Context context){
    this.context = context;
    mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
    lightManager = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}