Wechsel von Hoch zu Querformat wird nicht erkannt

  • Antworten:3
  • Bentwortet
Robbiani Renato
  • Forum-Beiträge: 609

04.03.2021, 19:49:18 via Website

Hallo zusammen

Ich möchte, dass das Diplay in meiner App anders dargestellt wird wenn ich von Hoch auf Querformat und umgekehrt wechsle. In diesem Moment sollte die überladene Methode "onSaveInstanceState" aufgerufen werden.

package ch.robbisoft.kompass;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

private final static double pi = Math.PI;
private static final double FAKTOR = 180 / pi;

private SensorManager sensorManager;
private Sensor sensor_accels = null;
private Sensor sensor_magnet = null;
private Sensor magnetfeldSensor;
private KompassnadelView view;
private boolean hoch = true; //Ist der Bildschirm hoch oder quer

private float accels[] = new float[3];
private float mags[] = new float[3];
private float pool_accels[][] = new float[10][3];
private float pool_mags[][] = new float[10][3];
private int n_accels = 0;
private int n_mags = 0;

private float[] f_werte = new float[3];
private float azimuth = 0.0f;
private float polar = 0.0f;
private float roll = 0.0f;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

// magnetfeldSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
sensor_accels = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensor_magnet = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
view = new KompassnadelView(this);
setContentView(view);
view.setPortrait(hoch);
}

public void onSensorChanged(SensorEvent event){

// if(view != null){
// view.setWinkel(event.values[0]);
// view.setWerty(event.values[1]);
// view.setWertz(event.values[2]);
// }
switch( event.sensor.getType() ){
case Sensor.TYPE_ACCELEROMETER : {
pool_accels[n_accels] = event.values.clone();
if( n_accels > 8 ){
accels = durchschnit( pool_accels );
n_accels = 0;
calc_pos();
}
n_accels++;
break;
}
case Sensor.TYPE_MAGNETIC_FIELD : {
pool_mags[n_mags] = event.values.clone();
if( n_mags > 8 ){
mags = durchschnit( pool_mags );
n_mags = 0;
calc_pos();
}
n_mags++;
}
}
}

public void onAccuracyChanged(Sensor sensor, int accuracy){

}

@Override
protected void onResume() {
    super.onResume();

// sensorManager.registerListener((SensorEventListener) this, magnetfeldSensor, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensor_accels, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(this, sensor_magnet, SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onPause() {
    sensorManager.unregisterListener(this);
    super.onPause();
}

private float[] durchschnit(float[][] pool) {
    float res[] = {0f, 0f, 0f};

    for(int i=0; i < 10 ;i++){
        res[0] += pool[i][0];
        res[1] += pool[i][1];
        res[2] += pool[i][2];
    }
    res[0] /= 10;
    res[1] /= 10;
    res[2] /= 10;

    return res;
}

private void calc_pos(){
    if (mags != null && accels != null) {
        float[] gravity = new float[9];
        float[] magnetic = new float[9];
        sensorManager.getRotationMatrix(gravity, magnetic, accels, mags);
        float[] outGravity = new float[9];
        sensorManager.remapCoordinateSystem(gravity, SensorManager.AXIS_X, SensorManager.AXIS_Z, outGravity);
        sensorManager.getOrientation(outGravity, f_werte);

        azimuth = (float) (f_werte[0] * FAKTOR);
        polar = (float) (f_werte[1] * -FAKTOR); //Was unter dem Horizont ist soll Negativ angezeigt werden
        roll = (float) (f_werte[2] * FAKTOR);

        //Berechnung von App Sonne

// if( azimuth < 0 ){
// azimuth = 180 - (azimuth * -1);
// }else{
// azimuth += 180;
// }

        mags = null;
        accels = null;
    }
    if(view != null){
        view.setWinkel(azimuth);
        view.setWerty(polar);
        view.setWertz(roll);
    }
}

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    hoch = !hoch;
    view.setPortrait(hoch);
}

}

Diese Methode wird aber in meiner App nicht durchlaufen. Sieht Jemand warum dies so ist?

Gruss Renato

Kommentieren
Beste Antwort
Ludy
  • Admin
  • Forum-Beiträge: 7.960

04.03.2021, 19:55:35 via Website

Hi,

mir fehlt hier der #onRestoreInstanceState

https://www.journaldev.com/22621/android-onsaveinstancestate-onrestoreinstancestate

— geändert am 04.03.2021, 19:56:25

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Robbiani Renato
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.03.2021, 19:53:00 via Website

Hast du das auch in der Mainfest zugelassen (also dass sich die App drehen kann)?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Beste Antwort
Ludy
  • Admin
  • Forum-Beiträge: 7.960

04.03.2021, 19:55:35 via Website

Hi,

mir fehlt hier der #onRestoreInstanceState

https://www.journaldev.com/22621/android-onsaveinstancestate-onrestoreinstancestate

— geändert am 04.03.2021, 19:56:25

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Robbiani Renato
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 609

04.03.2021, 20:13:33 via Website

Danke Ludy

Genau das war es!

Gruss Renato

Hilfreich?
Ludy
Kommentieren