Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 返回限制值范围的光传感器代码_Android - Fatal编程技术网

Android 返回限制值范围的光传感器代码

Android 返回限制值范围的光传感器代码,android,Android,我正在尝试编写一个非常基本的光度表应用程序,用于使用Galaxy S2作为传感器的旧35毫米相机 我首先要指出的是,本手机有一个隐藏/测试模式,可通过在拨号键盘上输入星形哈希零星形哈希,然后选择“传感器”来选择。这使得光传感器可用,当我改变光照水平时,它以5步为单位显示介于5到2000之间的勒克斯值范围 我编写的非常简单的概念验证代码只会显示三个值,即相同照明条件范围内的10、100和1000。我的代码是: public class LightMeterActivity extends Acti

我正在尝试编写一个非常基本的光度表应用程序,用于使用Galaxy S2作为传感器的旧35毫米相机

我首先要指出的是,本手机有一个隐藏/测试模式,可通过在拨号键盘上输入星形哈希零星形哈希,然后选择“传感器”来选择。这使得光传感器可用,当我改变光照水平时,它以5步为单位显示介于5到2000之间的勒克斯值范围

我编写的非常简单的概念验证代码只会显示三个值,即相同照明条件范围内的10、100和1000。我的代码是:

public class LightMeterActivity extends Activity implements SensorEventListener {

    private SensorManager mSensorManager;
    private Sensor mLightSensor;
    private float mLux = 0.0f;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(this, mLightSensor,
                SensorManager.SENSOR_DELAY_FASTEST);
    }

    @Override
    protected void onPause() {
        mSensorManager.unregisterListener(this);
        super.onPause();
    }

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

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
            mLux = event.values[0];
            String luxStr = String.valueOf(mLux);
            TextView tv = (TextView) findViewById(R.id.textView1);
            tv.setText(luxStr);
            Log.d("LUXTAG", "Lux value: " + event.values[0] );

        }
    }
}
有人能解释为什么会这样吗

我已经看到了这个问题
这根本没用。我无法理解内置测试模式如何能看到整个范围,而我的代码却看不到。

也许您的系统默认使用另一个光传感器。我编写了一个应用程序,只输出有关传感器的信息:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

    mLightSensorList = mSensorManager.getSensorList(Sensor.TYPE_LIGHT);
    tvSensorList = (TextView) findViewById(R.id.tvSensorList);
    StringBuilder sensorInfo = new StringBuilder("");
    if (mLightSensorList != null) {
        Log.d("Yury", mLightSensorList.toString());
        for (Sensor s : mLightSensorList) {
            sensorInfo.append("Sensor name: ");
            sensorInfo.append(s.getName());
            sensorInfo.append(" vendor: ");
            sensorInfo.append(s.getVendor());
            sensorInfo.append(" ver.: ");
            sensorInfo.append(s.getVersion());
            sensorInfo.append(" resolution: ");
            sensorInfo.append(s.getResolution());
            sensorInfo.append(" maxRange: ");
            sensorInfo.append(s.getMaximumRange());
            sensorInfo.append("\n");
        }
        tvSensorList.setText(sensorInfo.toString());
    }



    mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
}
您可以测试您的设备。
考虑Nexus One上的几个值。我在NexusOne上测试了您的应用程序,起初我只收到两个值10和225。但后来我把手机放在灯下,收到了很多价值观。但是,当传感器的分辨率为1f时,值集是有限的。我不知道为什么会发生这种情况。

我只在Galaxy S2上测试过,但我能看到真实值的唯一方法是直接从系统设备文件中获取:

#cat "/sys/devices/virtual/lightsensor/switch_cmd/lightsensor_file_state"
或在java中:

Scanner st = new Scanner(new File("/sys/devices/virtual/lightsensor/switch_cmd/lightsensor_file_state"));
int lux = st.nextInt();
st.close();

对于这样一个复杂的问题,50个代表不是少了一点吗p@Michael当前位置你浪费了你的时间,是吗?如果你认为这种态度会让你在堆栈溢出上大受欢迎,那你就大错特错了。这款手机只有一个光传感器,它是由Capella Microsystems,Inc.制造的CM3663光传感器。这是意料之中的事,我想不出为什么一个设备会有两个或更多这样的传感器。在文档中我发现设备中可能有几个传感器。getDefaultSensor可以只返回第一个传感器,也可以制作一个假传感器,平均使用几个真实传感器。但是,试着把你的手机放在灯下,同时检查你的传感器的最大范围。我已经得到了传感器类型的列表。类型_LIGHT。如前所述,其中有一个条目。其最大范围为3000.0。当然我把手机放在强光下。它的读数是1000.0。这确实有效!非常感谢。我原以为它需要root权限,但事实并非如此。