【问题标题】:How to take a picture when motion is detected using sensor使用传感器检测到运动时如何拍照
【发布时间】:2016-07-07 12:11:36
【问题描述】:

我想开发一个可以使用加速度计或接近传感器拍照的应用程序。我可以使用按钮拍照,但是当我从onSensorChanged 调用相同的方法即camera.takePicture 时。请帮帮我

【问题讨论】:

  • 请在此处粘贴一些代码以查看问题所在。您是否测试过该事件是否会触发?
  • @Nestoraj 你能告诉我如何在相机活动中捕获传感器吗?

标签: android android-fragments fragment android-camera android-sensors


【解决方案1】:

我没有对此进行测试,但它应该可以工作:

public class Main extends Activity implements SensorEventListener {
    private SensorManager senSensorManager;
    private Sensor senAccelerometer;

    private long lastUpdate = 0;
    private float last_x, last_y, last_z;
    private static final int SHAKE_THRESHOLD = 600;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        senSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        senAccelerometer = senSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        senSensorManager.registerListener(this, senAccelerometer , SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        Sensor mySensor = sensorEvent.sensor;

        if (mySensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            float x = sensorEvent.values[0];
            float y = sensorEvent.values[1];
            float z = sensorEvent.values[2];
            long curTime = System.currentTimeMillis();

            if ((curTime - lastUpdate) > 100) {
                long diffTime = (curTime - lastUpdate);
                lastUpdate = curTime;

                float speed = Math.abs(x + y + z - last_x - last_y - last_z)/ diffTime * 10000;

                if (speed > SHAKE_THRESHOLD) {
                     //CALL TAKE PHOTO FUNCTION
                }

                last_x = x;
                last_y = y;
                last_z = z;
            }

        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    //Disable sensor on hibernate
    protected void onPause() {
        super.onPause();
        senSensorManager.unregisterListener(this);
    }

    protected void onResume() {
        super.onResume();
        senSensorManager.registerListener(this, senAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
    }
}

您需要添加一些依赖于您的 IDE 的库

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-12
    • 2023-03-09
    • 2015-02-10
    • 2017-09-11
    • 2017-07-30
    • 2012-09-13
    • 2019-09-14
    • 2020-08-03
    相关资源
    最近更新 更多