【问题标题】:Android Accelerometer : onSensorChanged Runs AlwaysAndroid 加速度计:onSensorChanged 始终运行
【发布时间】:2011-12-16 09:03:41
【问题描述】:

我编写了一个通过网络发送 UDP 消息的方法。它工作正常。

之后,我尝试使用我的 Galaxy S 智能手机的加速度计传感器。我得到加速度计值,将它们显示在屏幕上。当值改变时(onSensorChanged 方法),我使用 UDP 将它们发送到我计算机上的应用程序。

问题在于程序总是发送传感器值,而不是在它们更改时发送。 所以,onSensorChanged 方法一直在运行。

我把手机放在桌子上,屏幕上的值是不变的,但它会继续发送。

我该如何解决这个问题?

onSensorChanged 方法:

public void onSensorChanged(SensorEvent event) {

    float x,y,z;

    if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){

                x=(event.values[0]);
                y=(event.values[1]);
                z=(event.values[2]);


            outputX.setText("x:"+String.format("%.1f",x));
                outputY.setText("y:"+String.format("%.1f",y));
                outputZ.setText("z:"+String.format("%.1f",z));


                sendPacket("192.168.2.40", 10001,
"X:" +String.format("%.1f",x) +
"Y:" +String.format("%.1f",y) +
"Z:" +String.format("%.1f",z));

    }
 }

发送方法:

public void sendPacket( String ipString, int port,
    String message) {

  try {

      byte[] bytes = null;

      bytes = message.getBytes("ASCII");


        InetAddress address;
        try {
        address = InetAddress.getByName(ipString);
        } catch (Exception e) {

            Log.e("Error","Exception");
            return;

        }


        DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
        address, port);

        DatagramSocket socket = new DatagramSocket();

        socket.send(packet);
        socket.close();

        } catch (Exception e) {
            Log.e("Error","Exception");
        return;
        }

}

【问题讨论】:

    标签: android accelerometer


    【解决方案1】:

    最好保存最后收到的值,并且仅在差值大于定义的阈值时才使用 sendPacket()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      相关资源
      最近更新 更多