Search code examples
androidaccelerometer

Android, The accelerometer doesn't stop dont know why?


can anyone help me why not the accelerometer nőt stops? There's the unregisterListener line but nothing.

Here is the code:

public class Festivale extends Activity implements SensorEventListener {

Button button;
CheckBox video, gps, acc;
Boolean recording = false;
public static SQLiteDatabase db;
String strlocation;
String city;
private SensorManager sensorManager;
Chronometer myChronometer;
EditText myEditText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    myChronometer = (Chronometer) findViewById(R.id.chronometer);
    myEditText = (EditText) findViewById(R.id.editText1);

    addDataBase(); // adatbázist hoz létre
    addListenerOnButton();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(
            "Készítette: Lakatos Dávid\nEmail: david.lakatos@gmail.com\nTel.: +3620/427-1166")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
    return true;

}

private void addGPSListener() {

    String text = myEditText.getText().toString();

    float f = Float.valueOf(text.trim()).floatValue();
    float update = f * 1000;

    if (update < 100 || update > 1000000) {
        AlertDialog alertDialog;
        alertDialog = new AlertDialog.Builder(Festivale.this).create();
        alertDialog.setTitle("Hiba!");
        alertDialog.setMessage("Helytelen frissítési idõ:\n" + update
                / 1000 + " sec!");
        alertDialog.show();
    } else {
        globalconstant.mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        globalconstant.mlocListener = new MyLocationListener();
        globalconstant.mlocManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, (long) update, 0,
                globalconstant.mlocListener);
    }

}

/* Létrehozzuk a program adatbázisát */
private void addDataBase() throws SQLException {
    db = openOrCreateDatabase("Festivale.db",
            SQLiteDatabase.CREATE_IF_NECESSARY, null);

}

public void addListenerOnButton() {
    button = (Button) findViewById(R.id.button1);

    button.setEnabled(true);
    button.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {

            gps = (CheckBox) findViewById(R.id.checkBox1);
            acc = (CheckBox) findViewById(R.id.checkBox2);
            video = (CheckBox) findViewById(R.id.checkBox3);

            /*
             * GPS
             */
            if (gps.isChecked()) {
                if (recording) {
                    globalconstant.mlocManager
                            .removeUpdates(globalconstant.mlocListener);
                    button.setText("Start");
                    recording = false;
                    myChronometer.stop();
                    myChronometer.setBase(SystemClock.elapsedRealtime());
                    acc.setClickable(true);
                    video.setClickable(true);
                    myEditText.setFocusable(true);
                    gps.setChecked(false);
                } else {
                    acc.setClickable(false);
                    video.setClickable(false);
                    myEditText.setFocusable(false);
                    myChronometer.setBase(SystemClock.elapsedRealtime());
                    myChronometer.start();
                    db.setVersion(1);
                    db.setLocale(Locale.getDefault());
                    db.setLockingEnabled(true);

                    final String gps =

                    "CREATE TABLE IF NOT EXISTS GPS_Values ("

                            + "id INTEGER PRIMARY KEY AUTOINCREMENT, Latitude float(10, 8), Longitude float(10, 8),Horizontal_Accuracy INTEGER,Altitude INTEGER,City TEXT,cur_timestamp TIMESTAMP);";
                    db.execSQL(gps);

                    addGPSListener();// meghívja a gps-t
                    recording = true;
                    button.setText("STOP");
                }
            }
            /*
             * Gyorsulásmérõ
             */
            if (acc.isChecked()) {

                if (recording) {
                    StopListenerAcc();
                    button.setText("Start");
                    recording = false;
                    myChronometer.stop();
                    myChronometer.setBase(SystemClock.elapsedRealtime());
                    gps.setClickable(true);
                    video.setClickable(true);
                    myEditText.setFocusable(true);
                    acc.setChecked(false);
                } else {
                    gps.setClickable(false);
                    video.setClickable(false);
                    myEditText.setFocusable(false);
                    myChronometer.setBase(SystemClock.elapsedRealtime());
                    myChronometer.start();
                    db.setVersion(1);
                    db.setLocale(Locale.getDefault());
                    db.setLockingEnabled(true);

                    final String acc =

                    "CREATE TABLE IF NOT EXISTS Accelerometer ("

                            + "id INTEGER PRIMARY KEY AUTOINCREMENT, X_Coordinate float(10, 6), Y_Coordinate float(10, 6), Z_Coordinate float(10, 6), cur_timestamp TIMESTAMP);";
                    db.execSQL(acc);

                    // Bekapcsolja az Accelerometer-t
                    addListenerAcc();
                    recording = true;
                    button.setText("STOP");
                }
            }

            /*
             * VideoRögzítés meghívása
             */
            if (video.isChecked()) {
                // kamera meghívása
                Intent myIntent = new Intent(Festivale.this, record.class);
                Festivale.this.startActivity(myIntent);
            }

        }

    });

}

private void StopListenerAcc() {
    // TODO Auto-generated method stub
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    // add listener
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);
    sensorManager.unregisterListener(this);
}

// GPS
public class MyLocationListener implements LocationListener {

    public void onLocationChanged(Location loc) {

        float szel = (float) loc.getLatitude();
        float hossz = (float) loc.getLongitude();
        int horiAcc = (int) (loc.getAccuracy());
        int Altitude = (int) (loc.getAltitude());

        String test = String.format("%.08f", szel);
        String test2 = String.format("%.08f", hossz);

        Geocoder geocoder = new Geocoder(Festivale.this,
                Locale.getDefault());
        try {
            List<Address> addresses = geocoder.getFromLocation(szel, hossz,
                    1);
            city = addresses.get(0).getLocality();
            // Toast.makeText(getApplicationContext(), city,
            // Toast.LENGTH_SHORT)
            // .show();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ContentValues gps_values = new ContentValues();

        gps_values.put("Latitude", test);
        gps_values.put("Longitude", test2);
        gps_values.put("Horizontal_Accuracy", horiAcc);
        gps_values.put("Altitude", Altitude);
        gps_values.put("City", city);

        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");
        Date date = new Date(System.currentTimeMillis());

        gps_values.put("cur_timestamp", dateFormat.format(date));

        try {
            db.beginTransaction();
            db.insert("GPS_Values", null, gps_values);
            db.setTransactionSuccessful();
        } finally {
            db.endTransaction();
        }

        // String Text = "My current location is: " + "Latitude = "
        // + loc.getLatitude() + "\nLongitude = " + loc.getLongitude();

        // Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT)
        // .show();

    }

    protected void onPause() {
        // super.onPause();
        globalconstant.mlocManager
                .removeUpdates(globalconstant.mlocListener);

    }

    public void onProviderDisabled(String provider) {
        Toast.makeText(getApplicationContext(), "Gps Disabled",
                Toast.LENGTH_SHORT).show();
        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    // show gps otions
                    Intent gpsOptionsIntent = new Intent(
                            android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(gpsOptionsIntent);
                    break;

                case DialogInterface.BUTTON_NEGATIVE:
                    dialog.cancel();
                    break;
                }
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(
                Festivale.this);
        builder.setMessage("A GPS nincs aktiválva!\nAktiválja most?")
                .setPositiveButton("Aktivál", dialogClickListener)
                .setNegativeButton("Nem", dialogClickListener).show();
    }

    public void onProviderEnabled(String provider) {
        Toast.makeText(getApplicationContext(), "Gps Enabled",
                Toast.LENGTH_SHORT).show();

    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

}// gps vége

private void addListenerAcc() {
    // TODO Auto-generated method stub
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    // add listener
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);
}

// Accelerometer
public void onSensorChanged(SensorEvent event) {

    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

        // assign directions
        float x = event.values[0];
        float y = event.values[1];
        float z = event.values[2];

        // Toast.makeText(Festivale.this,
        // "X: " + x + "\nY: " + y + "\nZ: " + z, Toast.LENGTH_LONG)
        // .show();

        ContentValues x_values = new ContentValues();

        x_values.put("X_Coordinate", x);
        x_values.put("Y_Coordinate", y);
        x_values.put("Z_Coordinate", z);

        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss");
        Date date = new Date(System.currentTimeMillis());

        x_values.put("cur_timestamp", dateFormat.format(date));

        db.insert("Accelerometer", null, x_values);
    }
}

public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub

}
 }

thx!


Solution

  • How about trying this to unregister you accelerometer (works for me):

    /**
         * <b><i>public void useAccelerometer(boolean use)</i></b>
         * <br>
         * Since: API 1
         * <br>
         * <br>
         * Set if you would like to enable the use of the accelerometer.
         * 
         * @param use 
         * <br>
         * True will enable the use of the accelerometer.
         * <br>
         * False will disable the use of the accelerometer.
         *  
         */
    
        public void useAccelerometer(boolean use) {
            if(use == true) {
                manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
            }
            else {
                manager.unregisterListener(this, accelerometer);
            }
        }