как отправить значения датчика по udp

Я полный нуб. Моя цель - отправить данные датчика (гироскопический магнит) по udp. С другой стороны, Matlab будет получать данные.

  1. Я могу отправить пакет udp, если датчики не зарегистрированы.
  2. Я могу отображать датчики, если я не использую udp для отправки данных.
  3. Я не могу делать и то, и другое одновременно!

Этот код должен считывать акселерометр и отображать его, в то же время он пытается асинхронно отправить предопределенный пакет udp каждые 2000 мс. Но запустить не получается! Какие-либо предложения? Мой код выглядит так:

    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() {
    }
}

person misalu2001    schedule 10.03.2012    source источник
comment
Привет, интересно, смог ли ты исправить свой код? Я делаю то же самое, было бы неплохо, если бы вы могли поделиться тем, как вы это исправили; спасибо, приятель :)   -  person Tina J    schedule 19.06.2014


Ответы (1)


Я бы предложил просмотреть ваш код с помощью отладчика, чтобы увидеть, дает ли это вам более конкретную информацию о том, что происходит/не происходит. Получаете ли вы какие-либо исключения, когда пытаетесь сделать и то, и другое одновременно?

Вы также должны использовать AlarmManager вместо TimerTask. @CommonsWare содержит много полезной информации о AlarmManager, например: Android: как использовать AlarmManager

Вот одно руководство по использованию отладчика Eclipse: http://www.vogella.de/articles/EclipseDebugging/article.html.

По моему опыту работы с Android, лучше всего попытаться установить точку останова перед исключением и перейти оттуда. В противном случае будет сложно расшифровать исключение, если вы просто войдете в отладчик, когда оно возникнет.

person Eric Levine    schedule 10.03.2012
comment
Спасибо за повтор. Есть ли какой-нибудь учебник по отладке с использованием исключений eclipse и монитора? (У меня есть достаточный опыт работы с Matlab, но мне стыдно, я не знаю, как отлаживать в eclipse.) - person misalu2001; 10.03.2012
comment
Добавлена ​​​​ссылка выше, и есть намного больше, если вы погуглите их. Также добавлены дополнительные советы. - person Eric Levine; 10.03.2012
comment
@elevine интересно, смогли ли вы исправить свой код? Я делаю то же самое, было бы неплохо, если бы вы могли поделиться тем, как вы это исправили :) Спасибо, приятель - person Tina J; 19.06.2014
comment
@TinaJasmin Это был не мой код, вопрос задал misalu2001. - person Eric Levine; 19.06.2014