从多个传感器读取时,我将所有值都设置为 0.0,android 传感器

问题描述 投票:0回答:1

我想从我的手机收集加速度计、加速度计(无重力)和陀螺仪数据并将其发送到我的 PC 中的 TCP 套接字。 它发送的值正确,但该值是错误的。全部都是0.0.

在照片中我有传感器数据输出。始终为 0。

这是MainActivity和一个传感器的代码(其他传感器相同,只是更改了Sensor.TYPE_...

主要活动代码:

public class MainActivity extends AppCompatActivity {

    EditText IP_entrada;
    TextView ConsoleOut;
    TextView ConsoleDebug;
    String Salida = "CONSOLE OUTPUT";

    boolean Cerrar;
    boolean Conectado;
    Socket sk;
    PrintWriter TCPOutput;
    BufferedReader TCPInput;
    String ACK = "";

    private Accelerometer accelerometer;
    private AccelerometerNG accelerometerNG;
    private Gyroscope gyroscope;

    float[] data = new float[9];
    private String Sdata;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        IP_entrada = findViewById(R.id.IP_text);
        ConsoleOut = findViewById(R.id.text_accelerometer);
        ConsoleDebug = findViewById(R.id.Output);

        Cerrar = false;
        Conectado = false;

        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build());

        accelerometer = new Accelerometer(this);
        accelerometerNG = new AccelerometerNG(this);
        gyroscope = new Gyroscope(this);

        accelerometer.setListener(new Accelerometer.Listener() {
            @Override
            public void onTranslation(float rx, float ry, float rz) {
                data[0] = rx;
                data[1] = ry;
                data[2] = rz;
            }
        });

        accelerometerNG.setListener(new AccelerometerNG.Listener() {
            @Override
            public void onTranslationNG(float rx, float ry, float rz) {
                data[3] = rx;
                data[4] = ry;
                data[5] = rz;
            }
        });

        gyroscope.setListener(new Gyroscope.Listener() {
            @Override
            public void onRotation(float rx, float ry, float rz) {
                data[6] = rx;
                data[7] = ry;
                data[8] = rz;
            }
        });
    }

    private void Send(String _DATA) {
        TCPOutput.println(_DATA);
    }

    private void Read(){
        try {
            ACK = TCPInput.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void SetDirection(View view) {
        log("Modo Conectar = true");
        try {
            log(" Socket: " + IP_entrada.getText().toString() + ":" + 8080);
            sk = new Socket(IP_entrada.getText().toString(), 8080);
            log("Conectado a IP:"+IP_entrada.getText().toString());
            TCPOutput = new PrintWriter(new OutputStreamWriter(sk.getOutputStream()), true);
            log("Conectado con exito");
            TCPInput = new BufferedReader(new InputStreamReader(sk.getInputStream()));
            Conectado = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void DisconnectClient(View view){
        log("Modo Cerrar = true");
        Cerrar = true;
    }

    private void log(String string) {
        ConsoleDebug.setText(String.format("%s\n", string));
    }

    @Override
    protected void onResume(){
        super.onResume();

        accelerometer.register();
        accelerometerNG.register();
        gyroscope.register();

        Sdata = data[0]+","+data[1]+","+data[2]+","+data[3]+","+data[4]+","+data[5]+","+data[6]+","+data[7]+","+data[8];
        ConsoleOut.setText((data[0]+"   "+data[1]+"   "+data[2]+"\n"+data[3]+"   "+data[4]+"   "+data[5]+"\n"+data[6]+"   "+data[7]+"   "+data[8]));

        if(Conectado){
            Send(Sdata);
            do{
                Read();
            }while (!ACK.equals("ACKDAT"));
        }
        if(Cerrar){
            try {
                sk.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            Conectado = false;
        }
    }

    @Override
    protected void onPause(){
        super.onPause();

        accelerometer.unregister();
        accelerometerNG.unregister();
        gyroscope.unregister();
    }
}

还有陀螺仪类

public class Gyroscope {
    public interface Listener{
        void onRotation(float rx, float ry, float rz);
    }

    private Listener listener;

    public void setListener(Listener l){
        listener = l;
    }

    private SensorManager sensorManager;
    private Sensor sensor;
    private SensorEventListener sensorEventListener;

    Gyroscope(Context context){
        sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        sensorEventListener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {
                if(listener != null){
                    listener.onRotation(sensorEvent.values[0],sensorEvent.values[1],sensorEvent.values[2]);
                }
            }

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

            }
        };
    }

    public void register(){
        sensorManager.registerListener(sensorEventListener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
    }

    public void unregister(){
        sensorManager.unregisterListener(sensorEventListener);
    }
}

我还放置了我拥有的类并添加了 AndroidManifest.xml 行。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true" />

出了什么问题,我能做什么?

java android android-studio tcp android-sensors
1个回答
1
投票

尝试清理并重新编译项目。

© www.soinside.com 2019 - 2024. All rights reserved.