0

このアプリケーションについて助けが必要です。アプリは、加速度計と磁気センサーの値を登録します。私はこれを作りました、アプリケーションは両方のセンサーのデータを登録します。ただし、アプリケーションはバックグラウンドになり、データは記録を続けます。次に、アプリケーションを再度起動すると、ファイル (SD カード) に 2 つのアプリケーションが異なる時刻で記録されます。

戻るボタンを押すまでAPPが実行される必要があります。アプリの書き方が最善ではないかもしれませんが、今のところ完璧なアプリケーションは必要ありません。

これがコードアプリです。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