Autore Topic: tutorial accelerometro  (Letto 7260 volte)

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
tutorial accelerometro
« il: 01 Aprile 2010, 11:05:38 CEST »
Buongiorno a tutti, questo è il mio primo post, con piacere ho notato questo ottimo forum e siccome vorrei scrivere un'applicazione riguardante principalmente i dati dei sensori dell'accelerometro mi chiedevo se qualcuno che ha già esperienza a riguardo potesse darmi delucidazioni

grazie a tutti, buona giornata
« Ultima modifica: 09 Aprile 2010, 14:14:56 CEST da ScarfaceIII »

Offline Pinabello

  • Nuovo arrivato
  • *
  • Post: 22
    • Mostra profilo
  • Dispositivo Android:
    Htc Dream Tim
  • Sistema operativo:
    Mac os X
Re:tutorial accelerometro
« Risposta #1 il: 01 Aprile 2010, 18:57:17 CEST »
E' un argomaneto interessante, ma non credo di riuscire a fare un tutorial in tempi brevi....

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:tutorial accelerometro
« Risposta #2 il: 01 Aprile 2010, 19:13:08 CEST »
Ora, spulciando la fornitissima guida per sviluppatori ho trovato cose tipo questa, ma non saprei come usarla al momento...ora: so che è abbastanza banale come problema, ma sto ancora capendo bene Activities, Intent, ecc. sapresti darmi una mano? come faresti per chiamare questa funzione e farti restituire il vettore? (penso che a questo punto il 3d andrebbe spostato in "richieste disperate di aiuto" o qualcosa di simile... :-\)

Perdona la niubbaggine ma sto leggendo TUTTA la dev guide per capire come funge sto androide  :-o (bello a proposito, sia il Nexus One, sia l'SDK)
« Ultima modifica: 09 Aprile 2010, 14:16:17 CEST da ScarfaceIII »

Offline Pinabello

  • Nuovo arrivato
  • *
  • Post: 22
    • Mostra profilo
  • Dispositivo Android:
    Htc Dream Tim
  • Sistema operativo:
    Mac os X
Re:tutorial accelerometro
« Risposta #3 il: 01 Aprile 2010, 19:49:39 CEST »

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:tutorial accelerometro
« Risposta #4 il: 02 Aprile 2010, 13:03:05 CEST »
EDIT: Sono riuscito a installare l'applicazione sul telefono e a testarla, quindi posso dire che funziona. Se a qualcuno interessa il codice è qui, ben accetti consigli, miglioramenti ecc  :-P

(ora mi manca solo la parte di vero e proprio logging, cioè scrivere i dati su un file di testo da poter analizzare...ce la farò!  :money_mouth:)

FANTASTICO! Grazie mille davvero, partendo dal codice postato a metà pagina che fa quasi esattamente quello che chiedo, l'ho modificato perché usa delle funzioni "deprecated". Vorrei postare il codice per chiedere se vi sembra corretto, ho dovuto fare un paio di hack perchè le funzioni nuove, al posto di quelle deprecate chiedono argomenti diversi e restituiscono oggetti diversi. Inoltre conteneva degli errori dovuti ai riferimenti degli assi, corretti sencondo il sistema di riferimento del telefono e rinominati secondo le convenzioni aeronautiche  ;-)

grazie mille dell'aiuto davvero, come detto sono proprio alle prime armi con Android e arrugginito su Java, quindi nonostante avessi individuato le classi che facevano al mio caso, non sapevo come fare a usarle  :'(

Ecco il mio codice, per chiunque voglia darmi una mano, grazie comunque per l'aiuto finora e grazie a chiunque prendesse a cuore la mia causa  :-P:

Codice (Java): [Seleziona]
package com.example.android.acclogger;


import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class AccLogger extends Activity implements SensorEventListener {
        final String tag = "AccLogger";
    SensorManager sm = null;
    TextView xAccView = null;
    TextView yAccView = null;
    TextView zAccView = null;
    TextView xOrView = null;
    TextView yOrView = null;
    TextView zOrView = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // get reference to SensorManager
        sm = (SensorManager) getSystemService(SENSOR_SERVICE);
        setContentView(R.layout.main);
        xAccView = (TextView) findViewById(R.id.xbox);
        yAccView = (TextView) findViewById(R.id.ybox);
        zAccView = (TextView) findViewById(R.id.zbox);
        xOrView = (TextView) findViewById(R.id.xboxo);
        yOrView = (TextView) findViewById(R.id.yboxo);
        zOrView = (TextView) findViewById(R.id.zboxo);
    }
       
        public void onSensorChanged(SensorEvent event) {
                Sensor sensor = event.sensor;
                float [] values = event.values;
                synchronized (this) {
                        Log.d(tag, "onSensorChanged: " + sensor + ", x: " +
                                        values[0] + ", y: " + values[1] + ", z: " + values[2]);
                        if (sensor.getType() == Sensor.TYPE_ORIENTATION) {
                xOrView.setText("Yaw: " + values[0]);
                yOrView.setText("Pitch: " + values[1]);
                zOrView.setText("Roll: " + values[2]);
            }
                        else if (sensor.getType() == Sensor.TYPE_ACCELEROMETER ) {
                xAccView.setText("Sway: " + values[0]);
                yAccView.setText("Surge: " + values[1]);
                zAccView.setText("Heave: " + values[2]);
            }
                }
        }
       
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
                Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
        }

    @Override
    protected void onResume() {
        super.onResume();
        Sensor Accel = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        Sensor Orient = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
      // register this class as a listener for the orientation and accelerometer sensors
        sm.registerListener((SensorEventListener) this, Accel, SensorManager.SENSOR_DELAY_FASTEST);
        sm.registerListener((SensorEventListener) this, Orient, SensorManager.SENSOR_DELAY_FASTEST);
    }
   
    @Override
    protected void onStop() {
        // unregister listener
        sm.unregisterListener(this);
        super.onStop();
    }
}

e questo è il file main.xml se volete provare a farlo andare...:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/hello"
   />
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Accelerometer"
   />
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="X Value"
   android:id="@+id/xbox"
   />
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Y Value"
   android:id="@+id/ybox"
   />
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Z Value"
   android:id="@+id/zbox"
   />    


<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Orientation"
   />
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="X Value"
   android:id="@+id/xboxo"
   />
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Y Value"
   android:id="@+id/yboxo"
   />
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Z Value"
   android:id="@+id/zboxo"
   />    

</LinearLayout>
« Ultima modifica: 02 Aprile 2010, 15:58:52 CEST da ScarfaceIII »