2010-08-18 19 views

cevap

5
+0

: Aşağıdaki

package edu.uw.android.thorm.wayfinder; 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.widget.TextView; public class CSensorActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mCompass; private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layoutsensor); mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mCompass = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); mTextView = (TextView) findViewById(R.id.tvSensor); } // The following method is required by the SensorEventListener interface; public void onAccuracyChanged(Sensor sensor, int accuracy) { } // The following method is required by the SensorEventListener interface; // Hook this event to process updates; public void onSensorChanged(SensorEvent event) { float azimuth = Math.round(event.values[0]); // The other values provided are: // float pitch = event.values[1]; // float roll = event.values[2]; mTextView.setText("Azimuth: " + Float.toString(azimuth)); } @Override protected void onPause() { // Unregister the listener on the onPause() event to preserve battery life; super.onPause(); mSensorManager.unregisterListener(this); } @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mCompass, SensorManager.SENSOR_DELAY_NORMAL); } } 

ilişkili XML dosyasıdır. İki soru daha: R ve değerleri neye göre başlatıyorsunuz? Ayrıca, bildirimleri almanın bir yolu var mı, yoksa tüm çalışma modeli de kullanımdan kaldırıldı mı? –

+1

Tamam, kaynak üssünde iyi bir örnek bulundu. Ben burada kopyalamaz, ama Android için git deposu göz atın, geliştirme/örnekleri/Compass/src/com/örnek/android/pusula/CompassActivity.java –

+1

Bildirimleri/olaylar sonunda bak kötü bir yoldur sensörler yapmak, bu yüzden afaik kullanımından vazgeçmiştir. Her küçük yön değişikliği, esasen UI iş parçacığı ile veriyi boğmak için çok sayıda olayı tetikler. – CodeFusionMobile

8

aşağıdaki pusula yönünü alır ve bir TextView görüntüler temel bir örnektir yana kullanmak standart API çağrıdır. SensorEventListener arayüzünü uygulayarak bunu yapar. Aşağıdaki kod satırındaki sabiti değiştirerek, sisteme olayların verilme hızını değiştirebilirsiniz (örn. "MSensorManager.registerListener (bu, mCompass, SensorManager.SENSOR_DELAY_NORMAL);") (OnResume() olayına bakın); Ancak, ayar sadece sisteme bir öneridir. Bu örnek, kullanılmadığında Dinleyiciyi kaydettirerek ve kaydını silerek pil ömrünü korumak için onReuse() ve onPause() yöntemlerini kullanır. Bu yardımcı olur umarım. Evet, belgelerinde bulundu

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tvSensor" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

</LinearLayout> 
+3

Bu, OP'nin atıfta bulunduğu kullanımdan kaldırılmış Oryantasyon sensörünü hala kullanmıyor mu? – Tim

+0

Evet - kullanımdan kaldırıldı. – Vaiden