gpt4 book ai didi

android - 如何通过udp发送传感器值

转载 作者:行者123 更新时间:2023-11-30 04:18:22 24 4
gpt4 key购买 nike

我是个菜鸟。我的目标是通过 udp 发送传感器数据(陀螺仪 acc 磁铁)。另一方面,matlab 将接收数据。

  1. 如果传感器未注册,我可以发送一个 udp 数据包。
  2. 如果我不使用 udp 发送数据,我可以显示传感器。
  3. 我不能同时做这两件事!

这段代码应该读取加速度计并显示它,同时它尝试每 2000 毫秒异步发送一个预定义的 udp 数据包。但是它无法运行!有什么建议么?我的代码是这样的:

    public class udp_sensors_matlab extends Activity implements SensorEventListener{
/** Called when the activity is first created. */
SensorManager sensorManager = null;

//for accelerometer values
TextView outputX;
TextView outputY;
TextView outputZ;

String messageStr="test udp";
String ip;
udpOut task;
int server_port = 12345;
DatagramSocket s = null;
int msg_length=messageStr.length();
byte[] message = messageStr.getBytes();
InetAddress local = null;
DatagramPacket p=null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
//just some textviews, for data output
outputX = (TextView) findViewById(R.id.TextView01);
outputY = (TextView) findViewById(R.id.TextView02);
outputZ = (TextView) findViewById(R.id.TextView03);
try {
s = new DatagramSocket();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
local = InetAddress.getByName("81.31.187.32");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
task = new udpOut();
task.execute("g");
timer= new Timer();
timerTask=new TimerTask(){ @Override
public void run() {
// TODO Auto-generated method stub
task = new udpOut();
task.execute("g");
}};
timer.scheduleAtFixedRate(timerTask, 2000, 2000);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onStop() {
super.onStop();
sensorManager.unregisterListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
}
synchronized public void onSensorChanged(SensorEvent event) {

switch (event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
outputX.setText("\tx:"+Float.toString(event.values[0]));
outputY.setText("\ty:"+Float.toString(event.values[1]));
outputZ.setText("\tz:"+Float.toString(event.values[2]));
break;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}

class udpOut extends AsyncTask <String, Integer, Long> {

protected Long doInBackground(String... messageStr) {
p = new DatagramPacket(message, msg_length,local,server_port);
try {
s.send(p);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void onProgressUpdate() {
}
}

最佳答案

我建议使用调试器单步执行您的代码,看看是否能为您提供有关正在发生/未发生的事情的更具体信息。当您尝试同时执行这两项操作时是否遇到任何异常?

您还应该使用 AlarmManager 而不是 TimerTask。 @CommonsWare 有很多关于 AlarmManager 的有用信息,例如:Android: How to use AlarmManager

这是一个使用 Eclipse 调试器的教程:http://www.vogella.de/articles/EclipseDebugging/article.html .

根据我使用 Android 的经验,最好尝试在异常之前设置断点并从那里单步执行。否则,如果您在异常发生时直接进入调试器,将很难破译异常。

关于android - 如何通过udp发送传感器值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com