2011-12-16 4 views
2

私はネットワーク経由でUDPメッセージを送信する方法を書いています。正しく動作しています。Android Accelerometer:onSensorChanged Runs常に

その後、私はギャラクシー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; 
     } 

} 

答えて

1

をそれは差が定義されたしきい値よりも大きい場合、最後に受信した値とのみsendPacket()を保存することが最善です。

+0

私はこの方法でお世話になりました。 –

関連する問題