Чтение LightSensor от LG P990 - PullRequest
       28

Чтение LightSensor от LG P990

0 голосов
/ 21 июля 2011

Я пытаюсь разработать приложение датчика освещенности для моего LG P990 для обнаружения лазера (не спрашивайте, почему).

Код выглядит следующим образом:

package soma.de.Light;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class LightSensorActivity extends Activity {

 SensorManager mySensorManager;
 Sensor myLightSensor;
 TextView textLightSensorData;
 TextView textLightSensor;

Button Start;


public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   textLightSensor = (TextView)findViewById(R.id.tvLight);
   textLightSensorData = (TextView)findViewById(R.id.tvAcc);

   mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
   myLightSensor = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

   Start = (Button)findViewById(R.id.btStart);
   Start.setOnClickListener(btListener);    

   if (myLightSensor == null){
    textLightSensor.setText("No Light Sensor!"); //THIS IS WHAT I GET!
   }else{
    textLightSensor.setText(myLightSensor.getName() + "\n " + myLightSensor.getResolution()  );

    mySensorManager.registerListener(lightSensorEventListener,
      myLightSensor,
      SensorManager.SENSOR_DELAY_NORMAL);
   }
}

private OnClickListener btListener = new OnClickListener()
{
public void onClick(View v){                 
    myLightSensor = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);    
    if (myLightSensor == null){
        textLightSensor.setText("No Light Sensor!");
       }else{
        textLightSensor.setText(myLightSensor.getName() + "\n " + myLightSensor.getResolution()      );

        mySensorManager.registerListener(lightSensorEventListener,
          myLightSensor,
          SensorManager.SENSOR_DELAY_NORMAL);
       }
}
};

SensorEventListener lightSensorEventListener
 = new SensorEventListener(){

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

}

@Override
public void onSensorChanged(SensorEvent arg0) {
 // TODO Auto-generated method stub
 if(arg0.sensor.getType()==Sensor.TYPE_LIGHT){
 textLightSensorData.setText("Light Sensor Date:"
   + String.valueOf(arg0.values[0]));
}else if(arg0.sensor.getType()==Sensor.TYPE_PROXIMITY){
 textLightSensorData.setText("Test "
   + String.valueOf(arg0.values[0]) +" " +  String.valueOf(arg0.values[1]));
}
}};
}

НоЯ получаю только «Отсутствие датчика освещенности» на моей активности.У LG P990 есть такой.В «скрытом меню» я вижу значения датчика освещенности в тесте ALC / Proximity.

Нужно ли что-то менять в своем коде, чтобы запустить его?

1 Ответ

1 голос
/ 13 декабря 2011

не уверен насчет getDefaultSensor(), но документация для него гласит:

    Note that the returned sensor could be a composite sensor,
    and its data could be averaged or filtered. If you need to access
    the raw sensors, use getSensorList()

Вот как я это делаю:

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

    // Check if there is at least one light sensor
    if (sm.getSensorList(Sensor.TYPE_LIGHT).size() == 0) {
        // No light sensor installed
    }
    else {
        Sensor light = sm.getSensorList(Sensor.TYPE_LIGHT).get(0);
        if (!sm.registerListener(this, light, SensorManager.SENSOR_DELAY_GAME)) {
            // Couldn't register light sensor listener
        }
    }

А затем в вашем методе onSensorChanged(), event.values[0] дает вам значение датчика освещенности, которое является целым числом в диапазоне 0..100, даже если я видел только значения 10 и 100 :-)

Удачи,

...