0

我为 android 创建了一个相机 API。这很好用。现在,如果加速度计读数 > 2.0(Gforce > 2.0),我正在尝试自动打开它,我也编写了一个活动来测量力。但是那部分不起作用。(当我单独检查加速度计部分时它工作正常。但是当我将它添加到相机项目时它不起作用)我该如何纠正这个问题。我已经参考下面的链接来制作相机。 http://marakana.com/forums/android/examples/39.html

下面是我的加速度计代码

package com.example;

import java.text.DecimalFormat;
import java.util.Timer;
import java.util.TimerTask;



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.widget.TextView;


public class Measure extends Activity{

    SensorManager sensorManager;
    TextView current;


    private double currentAccel= 0.0f;
    private static DecimalFormat REAL_FORMATTER = new DecimalFormat("0.####");


    private final SensorEventListener sensorEvent = new SensorEventListener(){
        double calibration = SensorManager.STANDARD_GRAVITY;

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

        }
        @Override
        public void onSensorChanged(SensorEvent event) {
                double x = event.values[0];
                double y = event.values[1];
                double z = event.values[2];

                double a = Math.round(Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2) + Math.pow(z, 2)));
                currentAccel = ((float)(a-calibration));

        }
};

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


        current = (TextView)findViewById(R.id.current);
        current.setTextSize(1, 30);

        sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(sensorEvent, accelerometer, SensorManager.SENSOR_DELAY_FASTEST);

        Timer updateTimer = new Timer("gForceUpdate");
        updateTimer.scheduleAtFixedRate(new TimerTask(){
                public void run() {
                        updateGUI();
                }
        }, 0, 50);

    }

    private void updateGUI(){
        runOnUiThread(new Runnable(){
                @Override
                public void run() {


                       double currentG = currentAccel / SensorManager.STANDARD_GRAVITY ;

                       current.setText(REAL_FORMATTER.format(currentG));

                      /* if(currentG>2.3){
                           CameraDemo obj = new CameraDemo();


                        String acl=Double.toString((Double)currentG);
                        String result=obj.sendAccelerationData(acl);

                        }
                        */
                }
        });
}

}
4

1 回答 1

0

我认为您不应该在主线程上创建 CameraDemo。在 updateTimer 中,调用另一个方法,该方法将使用 Handler 或 AsyncTask,与主线程外的相机进行交互,并将更改回传到 gui。

这是我用来理解这一点的教程。 http://www.vogella.com/articles/AndroidPerformance/article.html

于 2012-07-13T15:40:14.117 回答