1

iPhoneのほとんどのセンサーのデータをログに記録して電子メールで送信できる「SensorLogger」というiPhone用のアプリを見つけましたが、UDPパケットを使用してネットワーク経由でブロードキャストすることもできます。コードは次のとおりです(Java )私はそのデータを受信するために使用します:

import java.io.*;
import java.net.*;

public class Main {
    public static void main(String[] args) throws UnknownHostException, SocketException, IOException {
        DatagramSocket socket = new DatagramSocket(5555, InetAddress.getByName("0.0.0.0"));
        byte[] buf = new byte[64];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        while (true) {
            socket.receive(packet);
            String data = new String(packet.getData());
            System.out.println(java.util.Arrays.toString(data.split(",")));
        }
    }
}

それは完璧に動作します、これは実行中のiPhone上のアプリでの出力です:

[1343331999601, 4, 0.0013, -0.0049, -0.00237]
[1343331999636, 4, -0.0024, 0.0049, -0.00477]
[1343331999670, 4, -0.0073, 0.0073, -0.00377]
[1343331999704, 4, -0.0036, 0.0024, -0.00247]

最初の数字は一種のタイムスタンプですが、これらの数字が何を意味するのかわかりません。iPhoneの日付/時刻と一致しません... 2番目の数字は使用されているセンサーを意味し、1はGPS位置です。 2はコンパス、3は加速度計、4はジャイロスコープです。最終的な数値は、センサーからの値です(2番目の数値で定義されます)。今、私はこれらすべての値をよりユーザーフレンドリーな方法で表示する小さなGUIアプリを作りたかったのです...しかし、これは私がJavaで何かをプログラムするのは初めてであり、それを行う方法がわかりません...できます誰かがサンプルコードを送ってください。そうすれば、私はそれを行う方法を理解し、すべての値に対してそれを繰り返すことができます。

みなさん、ありがとうございました。

4

1 に答える 1

1

問題は解決しました、私は最終的にこのコードを使用しました:

import java.io.*;
import java.net.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws UnknownHostException, SocketException, IOException {
        DatagramSocket socket = new DatagramSocket(5555, InetAddress.getByName("0.0.0.0"));
        byte[] buf = new byte[64];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        while (true) {
            socket.receive(packet);
            String data = new String(packet.getData());
            String[] dataParsed = data.split(",");
            float timestamp = Float.parseFloat(dataParsed[0]);
            float sensortype = Float.parseFloat(dataParsed[1]);
            float x = Float.parseFloat(dataParsed[2]);
            float y = Float.parseFloat(dataParsed[3]);
            float z = Float.parseFloat(dataParsed[4]);
            String sensorname = new String();
            if (sensortype == 1) {
                sensorname = "GPS";
            }
            else if (sensortype == 2) {
                sensorname = "Magnetometer";
            }
            else if (sensortype == 3) {
                sensorname = "Accelerometer";
            }
            else if (sensortype == 4) {
                sensorname = "Gyroscope";
            }
            else if (true) {
                sensorname = "Unknown";
            }
            Date date = new Date();String line = ("Timestamp " + timestamp + ", local date " + date.toString() + ", sensor " + sensorname + ", x " + x + ", y " + y + ", z " + z);
            System.out.println(line);

        }
    }
}
于 2012-07-27T16:46:35.307 に答える