1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Newbie-Frage: Runden und RSSI

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von funk, 03.03.2010.

  1. funk, 03.03.2010 #1
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    Hallo,

    im Grunde hab ich zwei Fragen:
    Ich versuch mir gerade eine App zusammen zu pfuschen für meine Dipl.Arbeit.
    Leider bin ich ein wirklich grausiger Programmierer (keine Ahnung warum ich
    nie den Zugang dazu gefunden hab). Die App arbeitet zum einen mit den
    Bewegungssensoren und zum anderen mit Bluetooth (genauer gesagt mit
    den RSSI-Werten von Bluetooth-Nachbarn).

    Nun meine erste - etwas trivialere - Frage:
    Wenn ich mir die Werte des Accelerometer und des Kompass ausgeben lasse,
    dann sind diese Werte zwar schön auf 5 (Kompass) bzw. 7 (Acc)
    Nachkommastellen genau...das ist aber für meine Ausgabe völlig unnötig!
    -> Wie kann ich den ausgegebenen Text auf 2 Nachkommastellen reduzieren?

    Die zweite Frage ist dann wohl etwas komplexer:
    Ich habe es jetzt geschafft mit
    Code:
    short rssi = intent.getShortExtra(device.EXTRA_RSSI, Short.MIN_VALUE);
    den RSSI-Wert eines gefundenen BT-Nachbarn anzuzeigen, allerdings
    meint Eclipse dazu
    Außerdem hab ich noch nicht ganz den Discovery-Modus von Android
    verstanden und wie ich z.B. meiner App sagen kann, dass sie nach
    Änderungen im RSSI-Wert schauen und diesen ausgeben soll...

    Ich wäre für jede Hilfe dankbar!

    Gruß,
    Frank

    PS: Ich hab jetzt erstmal nicht den kompletten Code angehängt..er
    entspricht jedoch in Auszügen dem Android Dev Example Code des
    Bluetooth Chats DeviceListActivity.java | Android Developers
     
  2. SirMArtin, 03.03.2010 #2
    SirMArtin

    SirMArtin freier Samsungsupporter

    Beiträge:
    113
    Erhaltene Danke:
    7
    Registriert seit:
    05.08.2009
    Schau Dir mal NumberFormat an.

    Du greifst über device.EXTRA_RSSI auf die Konstante EXTRA_RSSI zu (also über eine Instanz der Klasse BluetoothDevice). Diese solltest Du aber über die Klasse direkt referenzieren (also statisch). Also so: BluetoothDevice.EXTRA_RSSI.
    Das ist im übrigen nur eine Warning und kein Compile-Error. Also nur schlechter Stil, aber nicht komplett falsch.

    SirMArtin
     
    Zuletzt bearbeitet: 03.03.2010
  3. funk, 03.03.2010 #3
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    Vielen Dank schon mal für die Tipps und Hinweise!

    und: schlechten Stil will ich ja auch auf jeden Fall vermeiden, mir
    war nur nicht klar, wo da jetzt der "Fehler" lag!

    Danke und Gruß,
    Frank
     
  4. funk, 04.03.2010 #4
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    Hey,

    sorry wenn das echt doofe Fragen sind, aber ich hab jetzt meinen Code um
    den Accelerometer auszulesen versucht mit NumberFormat aufzupeppen und
    bekomm dann nur die Meldung, dass die Anwendung beendet werden muss...

    Code:
    private SensorEventListener accellistener = new SensorEventListener() {
                public void onSensorChanged(SensorEvent e_accel) {      
                    if (e_accel.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
    
                        // geänderter Teil
                        NumberFormat nf = NumberFormat.getNumberInstance();
                        nf.setMinimumFractionDigits(0);
                        nf.setMaximumFractionDigits(2);
                        // Ende geänderter Formatierungsteil
                        
                        xAccel.setText(getString(R.string.accx) + ": " + nf.format(String.valueOf(e_accel.values[0])));
    
                        // so lief die Ausgabe bisher mit 7 Dezimalstellen
                        yAccel.setText(getString(R.string.accy) + ": " + String.valueOf(e_accel.values[1]));
                          
                        }
                    }
    Ist das vom Ansatz her schon hoffnungslos, oder sollte ich das nicht in
    der EventListener-Methode machen, oder gibt es sonst noch Hinweise?

    Danke schon mal und Gruß,
    Frank

    PS: Diese Änderung bewirkt das Abbrechen...
     
  5. SirMArtin, 04.03.2010 #5
    SirMArtin

    SirMArtin freier Samsungsupporter

    Beiträge:
    113
    Erhaltene Danke:
    7
    Registriert seit:
    05.08.2009
    Ohne Fehlermeldung ist natürlich schwer etwas zu sagen. Schau mal in die LogCat-View und poste mal die Exception. Wenn keine Exception zu sehen ist, bau mal folgenden try-catch-Block ein. (Disclaimer: das Fangen von der generellen Exception ist auch unschöner Stil, aber zur temporären Fehler-Suche durchaus hilfreich...)

    Code:
    private SensorEventListener accellistener = new SensorEventListener() {
        public void onSensorChanged(SensorEvent e_accel) {      
            try {
                if (e_accel.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
                    // geänderter Teil
                    NumberFormat nf = NumberFormat.getNumberInstance();
                    nf.setMinimumFractionDigits(0);
                    nf.setMaximumFractionDigits(2);
                    // Ende geänderter Formatierungsteil
    
                    xAccel.setText(getString(R.string.accx) + ": " + nf.format(String.valueOf(e_accel.values[0])));
    
                    // so lief die Ausgabe bisher mit 7 Dezimalstellen
                    yAccel.setText(getString(R.string.accy) + ": " + String.valueOf(e_accel.values[1]));
                }
            } catch (Exception e) {
                Log.e("MyApp", "Unknown Error", e);
            }
        }
    }
     
    Zuletzt bearbeitet: 04.03.2010
  6. funk, 04.03.2010 #6
    funk

    funk Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    1
    Registriert seit:
    21.12.2009
    Phone:
    Motorola Milestone
    Neuer Versuch - daher Doppel-Post...

    Ich hab jetzt den Code noch etwas geändert:

    Code:
        TextView xAccel = null;
        TextView xTemp = null;
    
    
    
    
       private SensorEventListener accellistener = new SensorEventListener() {
                public void onSensorChanged(SensorEvent e_accel) {      
                    if (e_accel.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
                        
                        String temp_x = String.valueOf(e_accel.values[0]);
                        Double temp_x_double = new Double (temp_x);
                        
                        NumberFormat nf = NumberFormat.getNumberInstance();
                        nf.setMinimumFractionDigits(0);
                        nf.setMaximumFractionDigits(2);
                        temp_x = nf.format(temp_x_double);
                        
                        xAccel.setText(getString(R.string.accx) + ": " + temp_x);
                        }
                 }
    
                public void onAccuracyChanged(Sensor sensor, int accuracy) {
                    //nicht genutzt
                    }
                };
    
    Ergebnis: jetzt formatiert er mir die Werte der X-Achse des Accel schön
    mit zwei Nachkommastellen...und bringt dann das Telefon komplett zum
    Abstürzen!!

    Das scheint wohl nicht der Weg zu sein..

    Tante Edith meint: Und es geht doch! Nachdem ich das ganze nochmal genauso
    kompiliert hab funktioniert das Ganze wohl doch...auch ohne kompletten Systemabsturz!

    trotzdem hier der Log Cat Text zu vorheriger Version

     
    Zuletzt bearbeitet: 04.03.2010

Diese Seite empfehlen