1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. funk, 01.07.2010 #1
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Ich bin gerade etwas am verzweifeln:

    Ich versuche gerade eine App zu schreiben, in der (unter Anderem) die
    Werte des Beschleunigungssensors ausgelesen werden und dann
    ausgegeben werden sollen (mit den Werten passieren noch ganz andere
    Schindluder [auch hier im Forum zu finden], aber es geht hier mehr um das
    Grundgerüst der App).

    Ich habe nun eine Accelerometer.java Klasse konstruiert, die alle
    Berechnungen und Abfragen des Accelerometer durchführen soll, damit
    nicht in meiner "Haupt".java zuviel Code-"Wuschd" steht. Sensors.java
    (= "Haupt".java) soll sich nur um die Ausgabe und UI-Events kümmern und
    jeweils die anderen Klassen (z.B. die Accelerometer.java) aufrufen wenn
    benötigt und von ihr Daten beziehen zur Ausgabe(-Steuerung).

    Jetzt schwirrt mir der Kopf von Intents, Handlern, Threads und sonstigem
    und ich als Java-Laie bin völlig verwirrt und komm auch mit den Android
    Docs und Tutorials im Netz nicht mehr weiter.

    DIE FRAGE:
    Wie schaffe ich es, dass die Accelerometer-Klasse im onSensorChanged
    die darin ausgelesenen Werte an die Sensors übermittelt und ich dort
    meine TextView aktualisieren kann?

    Sorry, wenn das jetzt zu basic ist aber ich bin etwas verzweifelt...

    Danke und Gruß,
    Frank

    PS: Hier mal meine Sensors.java
    Code:
    package de.zeh.android.Sensors;
    
    import android.app.Activity;
    import android.content.res.Configuration;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    
    public class Sensors extends Activity{
        
        // Deklaration Bildschirmausgabe-Variablen
        TextView grad = null;
        TextView xAccel = null;
        TextView yAccel = null;
        TextView zAccel = null;
        TextView yVelocity = null;
        TextView yDistance = null;
        TextView TempTime = null;
        TextView SensorCalibration = null;
        TextView VecSum = null;
        public long current_time = -1;
        public long start_time;
        
        float[] accelArray;
        // Deklaration der Buttons
        private Button calibrateButton;
        private Button startButton;
        private Button stopButton;
        
        // Options Menu position constant
        public static final int EXIT_ID = Menu.FIRST;
        
        // Boolean Variable um Threads zu stoppen (hier nicht im Code)
        boolean _stop = false;
     
        // Ende Deklaration
        //----------------------------------------------------------------------
        
        
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            
            Log.d("Log 1","onCreate gestartet");
            
            // Layout Definition
            setContentView(R.layout.main);
                
            grad = (TextView) findViewById(R.id.grad);
            xAccel = (TextView) findViewById(R.id.accx);
            yAccel = (TextView) findViewById(R.id.accy);
            zAccel = (TextView) findViewById(R.id.accz);
            
            calibrateButton = (Button) findViewById(R.id.calibrate_button);
            startButton = (Button) findViewById(R.id.start_button);
            stopButton = (Button) findViewById(R.id.stop_button);
    
            calibrateButton.setOnClickListener(mCalibrationListener);
            startButton.setOnClickListener(mCalibrationListener);
            stopButton.setOnClickListener(mCalibrationListener);
            
            Log.d("Log 2","Motion Sensor-Part und GUI initialisiert");
            
            Accelerometer.start();
            
            Bundle extras = getIntent().getExtras();
            if (extras != null) {
                accelArray = extras.getFloatArray("accel values");
            }
            
            grad.setText(String.format("%3.0f ", accelArray[3]) + getString(R.string.comp));
            xAccel.setText(getString(R.string.accx) + String.format(": %2.2f (%2.2f)", accelArray[0], x_calib));
            yAccel.setText(getString(R.string.accy) + String.format(": %2.2f (%2.2f)", accelArray[1], y_calib));
            zAccel.setText(getString(R.string.accz) + String.format(": %2.2f (%2.2f)", accelArray[2], z_calib));
        }
    
        // OnClickListener für Buttons des UI
        private OnClickListener mCalibrationListener = new OnClickListener() {
            public void onClick(View v) {
                Log.d("Log 12","OnClickListener gestartet");
                if (v == calibrateButton) {
    /*                 Accelerometer.doCalibration();
                     while (_CalInProgress)
                     {
                         // wait and do nothing
                     }
                     Toast.makeText(getApplicationContext(), "Kalibrierung erledigt!", Toast.LENGTH_SHORT).show();
                     SensorCalibration.setText(getString(R.string.calibration) + String.format(": %+2.5f | %+2.5f | %+2.5f", cx, cy, cz));
    */            }
                if (v == startButton) {
                    Geschwindigkeit = 0.0;
                    Geschwindigkeit_t0 = 0.0;
                    Strecke = 0.0;
                    start_time = System.currentTimeMillis();
                    _stop = false;
                    Log.d("Log start_1","Variablen setzen OK");
                    Toast.makeText(getApplicationContext(), "Starte Lokalisierung!", Toast.LENGTH_SHORT).show();
                }
                if (v == stopButton) {
                    _stop = true;
                    Accelerometer.stop();
                }
            }
        };
               
        // Override-Methoden für Ende und wieder aufgenommene Ausführung der Anwendung
        @Override
        protected void onResume() {
            super.onResume();
            Accelerometer.start();
        }
        
        
        @Override
        protected void onPause() {
            Accelerometer.stop();
            super.onPause();
        }
        
        @Override
        protected void onStop() {
            Accelerometer.stop();
            super.onStop();
        }
        
        @Override
        protected void onDestroy() {
            Accelerometer.stop();
            super.onDestroy();
        }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            boolean result = super.onCreateOptionsMenu(menu);
            menu.add(0, EXIT_ID, 0, R.string.menu_exit);
            return result;
        }
        
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()){
            case EXIT_ID:
                finish();
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
        
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
          super.onConfigurationChanged(newConfig);
          _stop = true;
          Accelerometer.start();
          setContentView(R.layout.main);
        }
    }
    PPS: Und hier die Accelerometer.java
    Code:
    package de.zeh.android.Sensors;
    
    import java.util.List;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    
    public class Accelerometer extends Sensors implements SensorEventListener{
        
        // Deklaration der Sensor-Werkzeuge und -Variablen
        private static SensorManager sensorManager;
        private static SensorEventListener sensorlistener;
        private List<Sensor> sensors;
        private static Sensor sensor;
        // Deklaration der Zeit-Variablen
        private long current_accel_time, lastUpdate = -1;
        // Deklaration der (ausgelesenen) Sensorwert-Variablen
        private static float last_x, last_y, last_z;
        public static float current_x, current_y, current_z, temp_comp, currentForce;
        // Deklaration der Variablen zum Auslesen des Sensorwert-Array
        private final int DATA_X = SensorManager.DATA_X;
        private final int DATA_Y = SensorManager.DATA_Y;
        private final int DATA_Z = SensorManager.DATA_Z;
        // Deklaration der Kalibrierungs-Variablen
        public static Double cx, cy, cz;
        
        
        public Accelerometer(Activity parent) {
            sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
            this.sensors = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
            this.sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
            this.sensors = sensorManager.getSensorList(Sensor.TYPE_GYROSCOPE);
            this.sensors = sensorManager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD);
            if (sensors.size() > 0) {
                sensor = sensors.get(0);
            }
        }
        public static void start () {
            if (sensor!=null)  {
                sensorManager.registerListener(sensorlistener, sensor, SensorManager.SENSOR_DELAY_UI);
            }
        }
        
        public static void stop () {
            sensorManager.unregisterListener(sensorlistener);
        }
        
        
        public void onAccuracyChanged(Sensor s, int value) {
            // nicht genutzt
        }
        
        public void onSensorChanged(SensorEvent event) {
            
            if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
                   temp_comp = event.values[0];
                }
            
            if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
                
                current_x = event.values[DATA_X];
                current_y = event.values[DATA_Y];
                current_z = event.values[DATA_Z];
    //            x_calib = current_x + cx;
    //            y_calib = current_y + cy;
    //            z_calib = current_z + cz;
                
                last_x = current_x;
                last_y = current_y;
                last_z = current_z;
            }
            float[] currentAccelArray = new float[] {current_x, current_y, current_z, temp_comp};
            
            Intent intent = new Intent(Accelerometer.this, Sensors.class);
            intent.putExtra("accel values", currentAccelArray);
            startActivity(intent);
        }
        
    /*    
        public static void doCalibration () {
            _CalInProgress = true;
            double x_temp = 0;
            double y_temp = 0;
            double z_temp = 0;
            int i = 0;
            while (i < 10) {
                if (current_x != last_x || current_y != last_y || current_z != last_z) {
                x_temp += current_x;
                y_temp += current_y;
                z_temp += current_z;
                i++;
                }
            }
            
            cx = -(x_temp/10);
            cy = -(y_temp/10);
            cz = -(z_temp/10) + SensorManager.GRAVITY_EARTH;
            
            _CalInProgress = false;
        }*/
    }
    
     
    Zuletzt bearbeitet: 01.07.2010
  2. Rotesmofa, 07.12.2010 #2
    Rotesmofa

    Rotesmofa Fortgeschrittenes Mitglied

    Hast du das Problem mittlerweile gelöst?
    Ich habe auch dieses Einsteiger Problem :thumbdn:
     
  3. AnlixStudios, 24.11.2013 #3
    AnlixStudios

    AnlixStudios Neuer Benutzer

    Der Artikel ist zwar schon etwas älter aber falls du das problem noch nicht gelöst haben solltest: Erstell doch eine Dritte Klasse mit einem Timer, der (z.b. alle 10 millisekunden) Die werte aus der einen Klasse Ausliest und in die Andere einträgt ;)
     
Die Seite wird geladen...

Users found this page by searching for:

  1. itents in einer anderen activity behandeln android java

    ,
  2. klasse an view übergeben swift

    ,
  3. boolean variable von einer in die andere klasse übergeben

Du betrachtest das Thema "Werte aus einer Klasse einer anderen Klasse übergeben und TextView verändern" im Forum "Android App Entwicklung",