0

我需要一些有关此应用程序的帮助。该应用程序注册加速度计和磁传感器的值。我做了这个,应用程序注册了两个传感器的数据。但应用程序进入后台,数据继续记录。然后,如果我再次启动应用程序,就像文件(SD 卡)中的 2 个应用程序记录,时间不同。

我需要应用程序运行,直到我按下返回按钮。可能是编写应用程序的方法不是最好的,但我现在不需要一个完美的应用程序。

这是代码应用程序。我不知道如何注册 2 个传感器,我用代码进行了测试。所以,问题是为什么我的应用程序进入后台?

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

        //Declaro el timer encargado de Acelerometro
        Timer t = new Timer();
        //inicio el schedule function and rate para el contador cada 5 seg
        t.scheduleAtFixedRate(new TimerTask() { //ojo

            @Override
            public void run() {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {//aqui agrego el codigo a ejecutar cada 5 seg
                        TextView tv = (TextView) findViewById(R.id.main_timer_text);
                        tv.setText(String.valueOf(time));
                        time += 1;
                        boolean sdDisponible = false;
                        boolean sdAccesoEscritura = false;

                        //Comprobamos el estado de la memoria externa (tarjeta SD)
                        String estado = Environment.getExternalStorageState();
                        // SI SD es montada ---> True
                        if (estado.equals(Environment.MEDIA_MOUNTED))
                        {
                            sdDisponible = true; // tenemos acceso a la SD
                            sdAccesoEscritura = true; // Tenemos acceso asi que escribirmos
                        } 
                        //Si tenemos acceso a la SD pero solo como Lectura
                        else if (estado.equals(Environment.MEDIA_MOUNTED_READ_ONLY))
                        {
                            sdDisponible = true; // Hay acceso
                            sdAccesoEscritura = false; // no podemos Escribir
                        } 
                        else 
                            // Si no tenemos acceso de ninguna forma
                        {
                            sdDisponible = false; // No hay acceso a la SD
                            sdAccesoEscritura = false; // No podemos Escribir
                        }
                        // SI SD disponible y tenemos permisos GRABAMOS
                        if (sdDisponible && sdAccesoEscritura)
                        {

                            try{

                //NO las uso    //xstr=Float.toString(X); // Realizando el cast de float a string
                                //ystr=Float.toString(Y);
                                //zstr=Float.toString(Z);
                                String datos=t_real+","+X+","+Y+","+Z;

                                File file = new File("/sdcard/AccSD.txt"); ///sdcard/AccSD.txt
                                BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
                                writer.write(datos);
                                writer.newLine();
                                writer.flush();
                                writer.close();

                               }
                            catch (Exception ex)
                            {
                                Log.e("Ficheros", "Error al escribir fichero a tarjeta SD");
                            }
                        }

                    }

                });
            }

        }, 0, 5000); //FIN Captura Acelerimetro

        //Inicio Del OTRO SENSOR
      //inicio el schedule function and rate para el contador cada 2 seg
        t.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() { //aqui agrego el codigo a ejecutar cada 2 seg
                        TextView tv2 = (TextView) findViewById(R.id.main_timer_text2);
                        tv2.setText(String.valueOf(time2));
                        time2 += 1;
                        //COdigo captura magentico
                        boolean sdDisponible = false;
                        boolean sdAccesoEscritura = false;

                        //Comprobamos el estado de la memoria externa (tarjeta SD)
                        String estado = Environment.getExternalStorageState();
                        // SI SD es montada ---> True
                        if (estado.equals(Environment.MEDIA_MOUNTED))
                        {
                            sdDisponible = true; // tenemos acceso a la SD
                            sdAccesoEscritura = true; // Tenemos acceso asi que escribirmos
                        } 
                        //Si tenemos acceso a la SD pero solo como Lectura
                        else if (estado.equals(Environment.MEDIA_MOUNTED_READ_ONLY))
                        {
                            sdDisponible = true; // Hay acceso
                            sdAccesoEscritura = false; // no podemos Escribir
                        } 
                        else 
                            // Si no tenemos acceso de ninguna forma
                        {
                            sdDisponible = false; // No hay acceso a la SD
                            sdAccesoEscritura = false; // No podemos Escribir
                        }
                        // SI SD disponible y tenemos permisos GRABAMOS
                        if (sdDisponible && sdAccesoEscritura)
                        {

                            try{

                //NO las uso    //xstr=Float.toString(X); // Realizando el cast de float a string
                                //ystr=Float.toString(Y);
                                //zstr=Float.toString(Z);
                                String datos=t_real+","+Xmg+","+Ymg+","+Zmg;

                                File file = new File("/sdcard/MagSD.txt"); ///sdcard/AccSD.txt
                                BufferedWriter writer2 = new BufferedWriter(new FileWriter(file,true));
                                writer2.write(datos);
                                writer2.newLine();
                                writer2.flush();
                                writer2.close();

                               }
                            catch (Exception ex)
                            {
                                Log.e("Ficheros", "Error al escribir fichero a tarjeta SD");
                            }
                        }

                    }

                });
            }

        }, 0, 2000); // AQUI MODIFICO EL INTERVALO DE TIEMPO !!!!!

      //inicio el schedule function and rate para el contador de tiempo real
        t.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() { 
                        TextView tv2 = (TextView) findViewById(R.id.main_timer_text3);
                        tv2.setText(String.valueOf(t_real));
                        t_real += 1;

                    }

                });
            }

        }, 0, 1000); // FIN Captura otro sensor  
    }

    // Estas entradas, onResume y onStop Detienen el servicio de sensores
    // para evitar gasto de bateria innecesaria
    @Override
    protected void onResume() {
        super.onResume();
        SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        //Listando sensores
        List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
        List<Sensor> MGsensor = sm.getSensorList(Sensor.TYPE_MAGNETIC_FIELD);
        if (sensors.size() > 0) {
            sm.registerListener(this, sensors.get(0), SensorManager.SENSOR_DELAY_GAME);
        }
        if (MGsensor.size() > 0) {
            sm.registerListener(this, MGsensor.get(0), SensorManager.SENSOR_DELAY_GAME);
        }

    }

    @Override
    protected void onStop() {
        SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);        
        sm.unregisterListener(this);
        super.onStop();
        MainActivity.this.finish(); // Linea que finaliza toda mi actividad EVITA ejeci

    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        //  Auto-generated method stub
       }
       // Aqui es donde capturamos los datos
    public void onSensorChanged(SensorEvent event) {
           synchronized (this) {
               //
               Sensor sensor = event.sensor;
               if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
                   X = event.values[0];
                   Y = event.values[1];
                   Z = event.values[2];
               }
               else if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
                   Xmg = event.values[0];
                   Ymg = event.values[1];
                   Zmg = event.values[2];
               }
               //
               // Aqui es donde se dan los datos (X-Y-Z cambian todo el rato)
                    }
               }
}
4

0 回答 0