Android 如何通过udp发送传感器值
我是个彻头彻尾的傻瓜。我的目标是通过udp发送传感器数据(陀螺仪acc磁铁)。另一方面,matlab将接收数据Android 如何通过udp发送传感器值,android,asynchronous,udp,sensors,Android,Asynchronous,Udp,Sensors,我是个彻头彻尾的傻瓜。我的目标是通过udp发送传感器数据(陀螺仪acc磁铁)。另一方面,matlab将接收数据 如果传感器未注册,我可以发送udp数据包 如果不使用udp发送数据,我可以显示传感器 我不能同时做这两件事 该代码应该读取并显示加速计,同时它尝试每2000毫秒异步发送一个预定义的udp数据包。 但它没有运行!有什么建议吗? 我的代码如下: public class udp_sensors_matlab extends Activity implements SensorEve
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() {
}
}
public类udp\u sensors\u matlab扩展活动实现SensorEventListener{
/**在首次创建活动时调用*/
SensorManager SensorManager=null;
//对于加速计值
文本视图输出;
文本视图输出;
文本视图输出;
String messageStr=“测试udp”;
字符串ip;
udpOut任务;
int server_port=12345;
DatagramSocket s=null;
int msg_length=messageStr.length();
byte[]message=messageStr.getBytes();
InetAddress local=null;
DatagramPacket p=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager=(sensorManager)getSystemService(传感器服务);
//只是一些文本视图,用于数据输出
outputX=(TextView)findViewById(R.id.TextView01);
outputY=(TextView)findViewById(R.id.TextView02);
outputZ=(TextView)findViewById(R.id.TextView03);
试一试{
s=新的DatagramSocket();
}捕获(SocketException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
local=InetAddress.getByName(“81.31.187.32”);
}捕获(未知后异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
任务=新的udpOut();
任务。执行(“g”);
定时器=新定时器();
timerTask=new timerTask(){@Override
公开募捐{
//TODO自动生成的方法存根
任务=新的udpOut();
任务。执行(“g”);
}};
timer.scheduleAtFixedRate(timerTask,20002000);
}
@凌驾
受保护的void onResume(){
super.onResume();
sensorManager.registerListener(这是sensorManager.getDefaultSensor(Sensor.TYPE\u Accelerator)、sensorManager.Sensor\u DELAY\u游戏);
}
@凌驾
受保护的void onStop(){
super.onStop();
sensorManager.unregisterListener(这是sensorManager.getDefaultSensor(Sensor.TYPE_Accelerator));
}
传感器更改时同步的公共无效(传感器事件){
开关(event.sensor.getType()){
外壳传感器.U型加速计:
outputX.setText(“\tx:”+Float.toString(event.values[0]);
outputY.setText(“\ty:”+Float.toString(event.values[1]);
outputZ.setText(“\tz:”+Float.toString(event.values[2]);
打破
}
}
@凌驾
精度已更改(传感器,int精度){}
类udpOut扩展了异步任务{
受保护的长doInBackground(字符串…messageStr){
p=新数据包(消息、消息长度、本地、服务器端口);
试一试{
s、 发送(p);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
受保护的void onProgressUpdate(){
}
}
我建议使用调试器逐步检查您的代码,看看这是否为您提供了关于正在发生/未发生的事情的更具体信息。当您尝试同时执行这两项操作时,是否会出现异常
您还应该使用AlarmManager
而不是TimerTask
。@commonware有很多关于AlarmManager
的好信息,例如:
下面是一个使用Eclipse调试器的教程:
根据我对Android的经验,最好是在异常发生之前设置一个断点,然后从那里逐步执行。否则,如果在异常发生时只进入调试器,则很难破译异常。我建议使用调试器逐步执行代码,看看这是否能为您提供更具体的信息关于正在发生/未发生的事情。当您尝试同时执行这两项操作时,是否会出现任何异常 您还应该使用
AlarmManager
而不是TimerTask
。@commonware有很多关于AlarmManager
的好信息,例如:
下面是一个使用Eclipse调试器的教程:
根据我对Android的经验,最好是在异常发生之前设置一个断点,然后从那里逐步执行。否则,如果在异常发生时只进入调试器,则很难破译异常。感谢您的重播。是否有关于如何使用eclipse和monitor异常进行调试的教程?(我对matlab有相当多的经验,但我很惭愧,我不知道如何在eclipse中调试。)添加了上面的链接,如果您搜索这些链接,还有更多内容。还添加了一些额外的建议。@elevine想知道您是否能够修复代码?我也在做同样的事情,如果您能分享您修复代码的方式,那会很好:)谢谢buddy@TinaJasmin这不是我的代码,misalu2001问了这个问题。谢谢你的重播。有没有关于如何使用eclipse和monitor示例进行调试的教程?(我对matlab有相当多的经验,但我很惭愧,我不知道如何在eclipse中进行调试。)在上面添加了一个链接,如果你在谷歌上搜索的话,会有更多的链接。还添加了一些额外的建议。@elevine想知道你是否能够修复你的代码?我也在做同样的事情,如果你能分享你是如何修复的,那会很好:)谢谢buddy@TinaJasmin这不是我的代码,misalu2001问了这个问题。嗨,想知道你是否能修复你的code?我正在做同样的事情,如果你能分享你是如何修复它的,那就太好了;谢谢,巴迪:)嗨,想知道你是否能修复你的代码?我正在做同样的事情,如果你能分享你是如何修复它的,那就太好了;谢谢,巴迪:)