小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android之使用傳感器獲取相應(yīng)數(shù)據(jù)

 joy_chen 2013-09-28

Android的大部分手機(jī)中都有傳感器,傳感器類型有方向、加速度(重力)、光線、磁場(chǎng)、距離(臨近性)、溫度等。

  方向傳感器:   Sensor.TYPE_ORIENTATION

  加速度(重力)傳感器: Sensor.TYPE_ACCELEROMETER

  光線傳感器:    Sensor.TYPE_LIGHT

  磁場(chǎng)傳感器:   Sensor.TYPE_MAGNETIC_FIELD

  距離(臨近性)傳感器: Sensor.TYPE_PROXIMITY

  溫度傳感器:   Sensor.TYPE_TEMPERATURE

//獲取某種類型的感應(yīng)器

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

//注冊(cè)監(jiān)聽,獲取傳感器變化值

sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);

上面第三個(gè)參數(shù)為采樣率:最快、游戲、普通、用戶界面。當(dāng)應(yīng)用程序請(qǐng)求特定的采樣率時(shí),其實(shí)只是對(duì)傳感器子系統(tǒng)的一個(gè)建議,不保證特定的采樣率可用。

最快: SensorManager.SENSOR_DELAY_FASTEST

最低延遲,一般不是特別敏感的處理不推薦使用,該種模式可能造成手機(jī)電力大量消耗,由于傳遞的為原始數(shù)據(jù),算法不處理好將會(huì)影響游戲邏輯和UI的性能。

游戲: SensorManager.SENSOR_DELAY_GAME

游戲延遲,一般絕大多數(shù)的實(shí)時(shí)性較高的游戲都使用該級(jí)別。

普通: SensorManager.SENSOR_DELAY_NORMAL

標(biāo)準(zhǔn)延遲,對(duì)于一般的益智類或EASY級(jí)別的游戲可以使用,但過(guò)低的采樣率可能對(duì)一些賽車類游戲有跳幀現(xiàn)象。

用戶界面: SensorManager.SENSOR_DELAY_UI

 

一般對(duì)于屏幕方向自動(dòng)旋轉(zhuǎn)使用,相對(duì)節(jié)省電能和邏輯處理,一般游戲開發(fā)中我們不使用。

 

使用傳感器做應(yīng)用的難點(diǎn)在于獲取數(shù)據(jù)后如何處理,獲得相應(yīng)需要的效果,這里涉及很多數(shù)學(xué)物理的知識(shí)……

下面使用一個(gè)代碼實(shí)例演示如何獲取方向與加速度的數(shù)據(jù):

  1. <span style="font-family:'Comic Sans MS';font-size:18px;">public class MainActivity extends Activity     
  2. {    
  3.     private TextView accelerometerView;    
  4.     private TextView orientationView;    
  5.     private SensorManager sensorManager;    
  6.     private MySensorEventListener sensorEventListener;    
  7.     @Override    
  8.     public void onCreate(Bundle savedInstanceState)     
  9.     {    
  10.         super.onCreate(savedInstanceState);    
  11.         setContentView(R.layout.main);    
  12.             
  13.         sensorEventListener = new MySensorEventListener();    
  14.         accelerometerView = (TextView) this.findViewById(R.id.accelerometerView);    
  15.         orientationView = (TextView) this.findViewById(R.id.orientationView);    
  16.         //獲取感應(yīng)器管理器    
  17.         sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);    
  18.     }    
  19.         
  20.     @Override    
  21.     protected void onResume()     
  22.     {    
  23.         //獲取方向傳感器    
  24.         Sensor orientationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);    
  25.         sensorManager.registerListener(sensorEventListener, orientationSensor, SensorManager.SENSOR_DELAY_NORMAL);    
  26.             
  27.         //獲取加速度傳感器    
  28.         Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);    
  29.         sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);    
  30.         super.onResume();    
  31.     }    
  32.         
  33.     private final class MySensorEventListener implements SensorEventListener    
  34.     {    
  35.         //可以得到傳感器實(shí)時(shí)測(cè)量出來(lái)的變化值    
  36.         @Override    
  37.         public void onSensorChanged(SensorEvent event)     
  38.         {       
  39.             //得到方向的值    
  40.             if(event.sensor.getType()==Sensor.TYPE_ORIENTATION)    
  41.             {    
  42.                 float x = event.values[SensorManager.DATA_X];          
  43.                 float y = event.values[SensorManager.DATA_Y];          
  44.                 float z = event.values[SensorManager.DATA_Z];      
  45.                 orientationView.setText("Orientation: " + x + ", " + y + ", " + z);     
  46.             }    
  47.             //得到加速度的值    
  48.             else if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER)    
  49.             {    
  50.                 float x = event.values[SensorManager.DATA_X];          
  51.                 float y = event.values[SensorManager.DATA_Y];          
  52.                 float z = event.values[SensorManager.DATA_Z];     
  53.                 accelerometerView.setText("Accelerometer: " + x + ", " + y + ", " + z);     
  54.             }    
  55.             
  56.         }    
  57.         //重寫變化    
  58.         @Override    
  59.         public void onAccuracyChanged(Sensor sensor, int accuracy)     
  60.         {    
  61.         }    
  62.     }    
  63.         
  64.     //暫停傳感器的捕獲    
  65.     @Override    
  66.     protected void onPause()     
  67.     {    
  68.         sensorManager.unregisterListener(sensorEventListener);    
  69.         super.onPause();    
  70.     }        
  71. }  </span>  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多