SORU
23 ŞUBAT 2010, Salı


Android: dans etmek istiyorum

Benim Android uygulaması yenilemek için sallamak bir özellik eklemek istiyorum.

Dokümantasyon SensorListener uygulama içerir buluyorum, ama Eclipse bana söyler tüm itiraz ve önermek SensorEventListener.

Kimse bu oluşturma hakkında gitmek nasıl güzel bir rehber vardenetleyicisi sallamak?

CEVAP
23 ŞUBAT 2010, Salı


Aşağıda örnek bir kod. Etkinlik sınıf içine koy:

  /* put this into your activity class */
  private SensorManager mSensorManager;
  private float mAccel; // acceleration apart from gravity
  private float mAccelCurrent; // current acceleration including gravity
  private float mAccelLast; // last acceleration including gravity

  private final SensorEventListener mSensorListener = new SensorEventListener() {

    public void onSensorChanged(SensorEvent se) {
      float x = se.values[0];
      float y = se.values[1];
      float z = se.values[2];
      mAccelLast = mAccelCurrent;
      mAccelCurrent = (float) Math.sqrt((double) (x*x   y*y   z*z));
      float delta = mAccelCurrent - mAccelLast;
      mAccel = mAccel * 0.9f   delta; // perform low-cut filter
    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
  };

  @Override
  protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
  }

  @Override
  protected void onPause() {
    mSensorManager.unregisterListener(mSensorListener);
    super.onPause();
  }

Ve onCreate yöntemini ekleyin:

    /* do this in onCreate */
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
    mAccel = 0.00f;
    mAccelCurrent = SensorManager.GRAVITY_EARTH;
    mAccelLast = SensorManager.GRAVITY_EARTH;

Sonra "mAccel" her yerde geçerli ivme, eksen bağımsız uygulama ve yerçekimi gibi statik ivme temizlenmiş.sorabilirsiniz Yaklaşık olacaktır. Eğer hareket yok, ve, izin verirse 0 ki >Eğer cihaz çalkalanır ise 2.

Yorumlara dayalı bu test için:

if (mAccel > 12) {
    Toast toast = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG);
    toast.show();
}

Notlar:

Bu accelometer kapatmanız gerekiyoronPauseve aktifonResumekaynaklar (CPU, Pil) kaydetmek için. Kodu gezegeni üzerinde varsayar ;-) ve Dünya'nın yerçekimi ivmesi başlatır. Aksi takdirde güçlü bir "" uygulama başlar ve "serbest düşüş" olarak yere çarptığında sarsıntı olacaktı Ancak, kod yerçekimi düşük-cut filtre nedeniyle alışması başlatıldı ve sonra da serbest uzayda başka gezegenlerde ya da iş. (hiç bir zaman kendi uygulamasını kullanmak olacak ne kadar biliyor...;-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ash100HD

    Ash100HD

    29 EKİM 2011
  • National Geographic

    National Geo

    7 Mayıs 2006
  • Plugable

    Plugable

    19 Mayıs 2010