Autore Topic: uso del sensore accellerometro  (Letto 923 volte)

Offline bisemanu

  • Nuovo arrivato
  • *
  • Post: 43
    • Mostra profilo
  • Dispositivo Android:
    Motorola Defy+ Acer Liquid A1
  • Sistema operativo:
    Mac OS X 10.7 Windows 7
uso del sensore accellerometro
« il: 12 Maggio 2012, 12:24:11 CEST »
Salve ragazzi,
stavo provando a fare una piccola app che usi l'accellerometro per avviare un  mediaplayer con un audio nella cartella raw. In pratica quando il cell viene scosso parte un audio. Girando un po su google sono riuscito a buttare giù questo codice, ma mi sto trovando con un problema, ogni volta che il cell viene scosso si avvia in continuazione il player sovrapponendo l'audio, vorrei modificare quindi il seguente codice realizzando un button che serva ad iniziare e stoppare l'interfacciamento con l'accellerometro e con il palyer. Sono riuscito per il player ma non so da dove cominciare per l'accellerometro mi sapreste dare una mano?

public class SensorTestActivity extends Activity implements SensorEventListener {
   private SensorManager sensorManager;
   private View view;
   private long lastUpdate;
   MediaPlayer mMediaPlayer;
   Button button;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      view = findViewById(R.id.textView);
      view.setBackgroundColor(Color.BLUE);
      
       button = (Button) findViewById(R.id.button1);
         button.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0) {
               
               mMediaPlayer.stop();
               
            }
         });

      sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
      sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);
      lastUpdate = System.currentTimeMillis();
   }

   @Override
   public void onSensorChanged(SensorEvent event) {
      if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
         getAccelerometer(event);
      }

   }

   private void getAccelerometer(SensorEvent event) {
      float[] values = event.values;
      // Movement
      float x = values[0];
      float y = values[1];
      float z = values[2];

      float accelationSquareRoot = (x * x + y * y + z * z)
            / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
      long actualTime = System.currentTimeMillis();
      if (accelationSquareRoot >= 2) //
      {
         if (actualTime - lastUpdate < 200) {
            return;
         }
         lastUpdate = actualTime;
            
               try {

                     mMediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.mymusic);

                     mMediaPlayer.setLooping(false);
                     mMediaPlayer.start();
                     mMediaPlayer.setOnCompletionListener(new
                             OnCompletionListener() {
                                 public void onCompletion(MediaPlayer arg0) {
                                     // if (mMediaPlayer != null) {
                                     // mMediaPlayer.release();
                                     // mMediaPlayer = null;
                                     // }
                                 }
                             });
                 } catch (Exception e) {
                     if (mMediaPlayer != null) {
                         mMediaPlayer.release();
                         mMediaPlayer = null;
                     }
               }
   }
   }

   @Override
   public void onAccuracyChanged(Sensor sensor, int accuracy){

   }

   @Override
   protected void onResume() {
      super.onResume();
      // register this class as a listener for the orientation and
      // accelerometer sensors
      sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);
   }

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

Offline cnicola90

  • Nuovo arrivato
  • *
  • Post: 32
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:uso del sensore accellerometro
« Risposta #1 il: 03 Luglio 2012, 19:10:36 CEST »
potresti utilizzare il metodo isPlaying() della classe media player..se la canzone è gia partita il metodo ti restituirà true..fai una cosa del tipo
if(!mp.isPlaying()){
mp.start();
}