第十周--傳感器

傳感器類型:

  • 加速度:SENSOR_TYPE_ACCELEROMETER
  • 磁力:SENSOR_TYPE_MAGNETIC_FIELD
  • 方向:SENSOR_TYPE_ORIENTATION
  • 陀螺儀:SENSOR_TYPE_GYROSCOPE
  • 光線感應(yīng):SENSOR_TYPE_LIGHT
  • 壓力:SENSOR_TYPE_PRESSURE
  • 溫度 :SENSOR_TYPE_TEMPERATURE
  • 接近:SENSOR_TYPE_PROXIMITY
  • 重力:SENSOR_TYPE_GRAVITY
  • 線性加速度:SENSOR_TYPE_LINEAR_ACCELERATION
  • 旋轉(zhuǎn)矢量:SENSOR_TYPE_ROTATION_VECTOR

如何使用:

  • 獲取SensorManager對(duì)象
  • 獲取Sensor對(duì)象
  • 注冊(cè)Sensor對(duì)象
  • 重寫<code>onAccuracyChanged</code>, <code>onSensorChanged</code>方法
  • 注銷Sensor對(duì)象

以下是加速度傳感器的例子:

public class AccelerometerActivity extends AppCompatActivity implements SensorEventListener {
    private SensorManager mSensorManager;
    private Sensor mSensor;    
    private EditText mEdtAcc;  
    @Override
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.activity_accelerometer);  

        mEdtAcc = (EditText) findViewById(R.id.acc_edtAcc);     

        //1. 獲取SensorManager
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);  
        //2. 獲取Sensor
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        if (mSensor == null){  
            Toast.makeText(this, "傳感器不存在", Toast.LENGTH_SHORT).show();
        }  
    }    
    @Override 
    protected void onResume() {  
        super.onResume();  
        //3. 注冊(cè)Sensor 
        mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI); 
    } 
    @Override
    // 當(dāng)傳感器的值發(fā)生改變時(shí)回調(diào)該方法
    public void onSensorChanged(SensorEvent sensorEvent) { 
       //4. 重寫onSensorChanged和onAccuracyChanged方法  
       float[] values = sensorEvent.values; 
       StringBuilder stringBuilder = new StringBuilder();     
       stringBuilder.append("X軸上的加速度:");     
       stringBuilder.append(values[0]);
       stringBuilder.append("Y軸上的加速度");       
       stringBuilder.append(values[1]);   
       stringBuilder.append("Z軸上的加速度");   
       stringBuilder.append(values[2]);    

       mEdtAcc.setText(stringBuilder.toString()); 
    }    
    @Override 
    // 當(dāng)傳感器精度改變時(shí)回調(diào)該方法。
    public void onAccuracyChanged(Sensor sensor, int i) {  
    } 
    @Override  
    protected void onPause() {  
         super.onPause();  
         //5. 注銷Sensor 
         mSensorManager.unregisterListener(this, mSensor);  
    }
}

注:
<code>SersorManager.registerListener(SensorListener listener, Sensor sensor, int rate)</code>中的第三個(gè)方法是<code>int</code>類型的<code>rate</code>,指定獲取傳感器數(shù)據(jù)的頻率。
<code>rate</code>可以獲取傳感器數(shù)據(jù)的頻率,支持如下幾個(gè)頻率值:
<code>SENSOR_DELAY_FASTEST</code>:最快,延遲最小。
<code>SENSOR_DELAY_GAME</code>:適合游戲的頻率。
<code>SENSOR_DELAY_NORMAL</code>:正常頻率。
<code>SENSOR_DELAY_UI</code>:適合普通用戶界面的頻率。


關(guān)于 方向傳感器 的寫法可以參考下面網(wǎng)址,寫得不錯(cuò):
http://www.bkjia.com/Androidjc/924827.html


檢測(cè)傳感器

檢測(cè)傳感器一般有兩種方法:

  • 一種是在實(shí)例化Sensor的時(shí)候判斷當(dāng)前傳感器是否存在,如:


    檢測(cè)設(shè)備是否存在xxx傳感器
  • 另一種方法在<code>manifest.xml</code>清單上加上<code><uses-feature></code>來過濾,如:


如果你向你的清單文件中添加這個(gè)元素和描述符,僅僅 設(shè)備有加速度傳感器的用戶能在Google Play中看見你的應(yīng)用程序。
如果你的應(yīng)用程序一定要某個(gè)傳感器的時(shí)候,你應(yīng)該設(shè)置這個(gè)描述符為<code>android:required="true"</code>。如果你的應(yīng)用程序的一些功能使用一個(gè)傳感器,但是沒有傳感器仍然可以運(yùn)行,你應(yīng)該在<code><uses-feature></code>元素中列出這個(gè)傳感器,但是設(shè)置這個(gè)描述符為<code>android:required="false"</code>。這個(gè)幫助確保設(shè)備能安裝你的應(yīng)用,即使它們沒有這個(gè)特定的傳感器。這也是一個(gè)項(xiàng)目管理的最佳實(shí)踐,幫組你跟蹤你的應(yīng)用程序使用的特性。記住,如果你的應(yīng)用程序使用一個(gè)特定的傳感器,但是沒有它仍然可以運(yùn)行,那么你應(yīng)該在運(yùn)行時(shí)檢測(cè)這個(gè)傳感器,并且酌情啟動(dòng)或禁用應(yīng)用程序的功能。


相關(guān)文獻(xiàn):http://blog.csdn.net/p106786860/article/details/16800467

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1方向傳感器在方向傳感器中values變量的3個(gè)值都表示度數(shù),它們的含義如下:values[0]:該值表示方位,也...
    Android_zhang閱讀 489評(píng)論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • Android系統(tǒng)提供了對(duì)傳感器的支持,如果手機(jī)設(shè)備的硬件提供了這些傳感器,Android應(yīng)用可以通過傳感器來獲取...
    trampcr閱讀 4,498評(píng)論 3 12
  • Android傳感器定義 Android 傳感器相關(guān)術(shù)語微機(jī)電傳感器(MEMS)MEMS 通常制作在規(guī)格很小的硅芯...
    Jannonx閱讀 4,724評(píng)論 0 1
  • 說句心里話,原本我早就想動(dòng)手寫寫這篇文章,遲遲未動(dòng)筆的原因是:一來因接觸簡(jiǎn)書時(shí)間不長,沒有獲得可圈可點(diǎn)的成績,感覺...
    野貓愛魚閱讀 797評(píng)論 70 60

友情鏈接更多精彩內(nèi)容