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 内で、ハンドラーまたは AsyncTask を使用する別のメソッドを呼び出して、メイン スレッドから離れてカメラとやり取りし、変更を GUI にポストバックします。

これは、これを理解するために使用したチュートリアルです。 http://www.vogella.com/articles/AndroidPerformance/article.html

于 2012-07-13T15:40:14.117 に答える