-2

センサー値とサウンドを表示する 4 つのクラスがあります。onSensorChanged() と onProgressUpdate() を使用して 4 つのクラスで異なる値を取得します。メイン クラスの 1 つのボタンをクリックしてこれらの値を取得したいと考えています。

私の問題は、センサー値をクラスに渡すにはどうすればよいですか?

これらは私のsound.classです

        public Void doInBackground(Void... params) {
        while(rec == true){
            try{
                Thread.sleep(250);
            }catch(InterruptedException e){
                e.printStackTrace();
            }
            ampitude = recorder.getMaxAmplitude();
            db =(float) (20 * Math.log10(ampitude));
            publishProgress(db);
        }
        return null;
    }
    public void onProgressUpdate(Float... progress){

        database.addSoundData(dB);
        dB = (progress[0].toString());
        sound.setText("dB: "+ dB);
    }
}

これは私の Sensor クラスの 1 つです

    public void onSensorChanged(SensorEvent event) {
    float speedX=event.values[0];
    float speedY=event.values[1];
    float speedZ=event.values[2];
    float absoluteSpeed = (float)Math.sqrt(speedX*speedX + speedY*speedY + speedZ*speedZ);


    db.addSpeedData(speedX, speedY, speedZ, absoluteSpeed );
    String results = "X: "+ event.values[0] + "\nY: "+ event.values[1] + "\nZ: "+ event.values[2] +"\nAbsolute: "+ absoluteSpeed;
    speed.setText(results);

}
4

1 に答える 1

0

リスナーを使用して、値をアクティビティにパイプします。更新のストリームを取得しますが、ボタンを押すと UI を更新できます。以下は大まかな擬似コードです。

そのようにリスナーを作成します

public Interface MyListener{

    public void onSensor1Update(Object value);
    public void onSensor2Update(Object value);
    public void onSensor3Update(Object value);
}

これを Activity に実装し、Activity の参照をセンサー クラスに渡して、リスナーとして機能させます。

public class MyClassActivity implements MyListener{

    public void createSensors(){
        Sensor1 s1 = new Sensor1();
        s1.listener = this;

        Sensor2 s2 = new Sensor2();
        s2.listener = this;
    }

    @Override
    public void onSensor1Update(Object value){
         //do something
    }
    public void onSensor2Update(Object value){
        //do something 
    }
    ....
    ....
    etc.
}

値が必要なクラスごとにこのようなことを行います。これは AsyncTask クラスに対しても行うことができます。

public class Sensor1{

    public MyListener listener;

    @Override
    public void onSensorChanged(...){
        listener.onSensor1Update(some value);
    }

}
于 2013-04-14T23:18:25.203 に答える