既然SENSOR_ORIENTATION已被棄用,那麼獲得指南針標題的最佳做法是什麼?舊的方式非常簡單。如何獲取Android羅盤閱讀?
7
A
回答
5
SensorManager.getOrientation(float[] R, float[] values)是標準的API調用自API級別3
8
以下是獲得羅盤航向,並將其顯示在一個TextView一個基本的例子來使用。它通過實現SensorEventListener接口來實現。您可以通過更改以下代碼行中的常量(即「mSensorManager.registerListener(this,mCompass,SensorManager.SENSOR_DELAY_NORMAL);」)(參見OnResume()事件)來更改事件傳遞到系統的速率。但是,這個設置只是對系統的一個建議。此示例還使用onReuse()和onPause()方法,通過在不使用時註冊和取消註冊監聽器來延長電池壽命。希望這可以幫助。
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);
}
}
以下是相關的XML文件:
<?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>
相關問題
- 1. 從羅盤獲取方向
- 2. 如何逐行閱讀並從鍵盤獲取輸入?
- 3. 閱讀磁盤
- 4. 獲取sass /羅盤文件列表
- 5. 如何閱讀閱讀/獲取Dropbox文件
- 6. 如何獲取文件逐行閱讀
- 7. 如何獲取已閱讀的內容
- 8. 如何閱讀Facebook的signed_request獲取user_id
- 9. 如何從Json閱讀器獲取messageProperty?
- 10. 的Android羅盤方位
- 11. Android AR羅盤顯示器
- 12. Android羅盤噪聲算法
- 13. 閱讀Android WebView中的鍵盤事件
- 14. 如何獲取當前指南針閱讀android 2.1
- 15. 如何獲取TalkBack以閱讀Android progressBar進度?
- 16. 如何閱讀的Android
- 17. 如何獲取鍵盤isShowing與否Android
- 18. 閱讀XML獲取實體
- 19. 羅盤和傾角計沒有讀數
- 20. 如何讀取Vim「鍵盤綁定」(鍵盤快捷鍵?),「<C-f>」?如何閱讀其他Vim文檔?
- 21. 如何閱讀鍵盤事件之外的鍵盤狀態?
- 22. 如何讀取JAWS屏幕閱讀器
- 23. 閱讀鍵盤狀態
- 24. 閱讀輸入鍵盤
- 25. 拼合羅盤
- 26. MATLAB羅盤北
- 27. 旋轉羅盤發佈的Android
- 28. 羅馬圖書館閱讀訂閱的Java
- 29. 使用android羅盤,加速度計和陀螺儀獲取當前位置
- 30. 閱讀的Android
是啊,我發現的文件中。還有兩個問題:你將R和值初始化爲什麼?另外,是否有獲取通知的方法,或者是否已棄用整個工作模型? – 2010-08-19 03:44:38
好的,在源代碼中找到了一個很好的例子。我不會在這裏複製它,但如果你瀏覽Android的git倉庫,看看開發/樣本/指南針/ src/com/example/android/compass/CompassActivity.java的末尾 – 2010-08-19 15:54:13
通知/事件是一個糟糕的方式做傳感器,這就是爲什麼它是depacated afaik。每一個細微的方面變化都會觸發大量的事件,實質上是用數據扼殺UI線程。 – CodeFusionMobile 2010-08-20 14:08:11