我发现了一款名为“SensorLogger”的iPhone应用程序,它可以记录大多数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上的日期/时间不匹配...第二个数字表示使用什么传感器,1是GPS位置,2是罗盘,3是加速度计,4是陀螺仪。最终数字是传感器的值(由第二个数字定义)。现在,我想做一个小的GUI应用程序,它将以更加用户友好的方式显示所有这些值...但是,这是我第一次使用Java编程并且我不知道如何做到这一点...可以任何人都请发送一个示例代码,这样我就可以理解如何做到并重复所有这些值。
谢谢,祝大家度过愉快的一天。
答案 0 :(得分:0)
问题解决了,我终于使用了这段代码:
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);
}
}
}