android Sensor一些手機感應效果

來源:互聯網
上載者:User

標籤:android   style   color   ar   os   java   sp   strong   資料   

1.Sensor Type
      重力感應/加速度感應器 (G-Sensor)
       光感應   (Light-Sensor) 
      溫度感應
      方向感應
      磁場、
      臨近性


2.如何?Sensor編程
     a.擷取系統服務(SENSOR_SERVICE)返回一個SensorManager 對象
           sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE);
     b.通過SensorManager對象擷取相應的Sensor類型的對象
           sensorObject = sensormanager.getDefaultSensor(sensor Type);
     c.聲明一個SensorEventListener 對象用於偵聽Sensor 事件,並重載onSensorChanged方法
            SensorEventListener sensorListener = new SensorEventListener(){
             };
     d.註冊相應的SensorService
             sensormanager.registerListener(sensorListener, sensorObject, Sensor TYPE);
    e.銷毀相應的SensorService
            sensormanager.unregisterListener(sensorListener, sensorObject);
 
    f: SensorListener 介面是感應器應用程式的中心。它包括兩個必需方法:
          onSensorChanged(int sensor,float values[]) 方法在感應器值更改時調用。
          該方法只對受此應用程式監視的感應器調用(更多內容見下文)。該方法的參數包括:一個整數,指示更改的感應器;一個浮點值數組,表示感應器資料本身。有些感應器只提供一個資料值,另一些則提供三個浮點值。方向和加速表感應器都提供三個資料值。
      當感應器的準確性更改時,將調用 onAccuracyChanged(int sensor,int accuracy) 方法。參數包括兩個整數:一個表示感應器,另一個表示該感應器新的準確值。

 
3.關於G-Sensor
  Android 加速度感應器的類型是 Sensor.TYPE_ACCELEROMETER
  通過 android.hardware.SensorEvent 返回加速度感應器值。
  加速度感應器傳回值的單位是加速度的單位 m/s^2(米每二次方秒),有三個方向的值分別是
  values[0]: x-axis 方向加速度
  values[1]: y-axis 方向加速度
  values[2]: z-axis 方向加速度
  其中x,y,z方向的定義是以水平放置在的手機的右下腳為參照系座標原點

  x 方向就是手機的水平方向,右為正
  y 方向就是手機的水平垂直方向,前為正
  y 方向就是手機的空間垂直方向,天空的方向為正,地球的方向為負
需要注意的是,由於地球固有的重力加速度g (值為9.8 m/s^2),
  因此現實中實際加速度值應該是 z方向傳回值 - 9.8 m/s^2.
  比如你以 2 m/s^2 的加速度將手機拋起,這時z方向的傳回值應該是 11.8 m/s^2.
  反之若以手機以2 m/s^2 的加速度墜落,則z方向的傳回值應該是 7.8 m/s^2.
  x,y方向則沒有上述限制。


我自己寫了一個類似於的搖一搖的效果,代碼如下,

import android.app.Activity;import android.app.Service;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.os.Vibrator;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class Sensor extends Activity implements SensorEventListener{private TextView tv =null;private Button button = null;private SensorManager sensorManager =null;private Vibrator vibrator = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sensor);tv = (TextView) findViewById(R.id.textview1);button = (Button) findViewById(R.id.button1);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtv.setText("文本複原");}});sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);}@Overrideprotected void onResume() {super.onResume();sensorManager.registerListener(this, sensorManager.getDefaultSensor(android.hardware.Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onPause() {super.onPause();sensorManager.unregisterListener(this);}@Overridepublic void onSensorChanged(SensorEvent event) {int sensorType = event.sensor.getType();          //values[0]:X軸,values[1]:Y軸,values[2]:Z軸          float[] values = event.values;          if(sensorType == android.hardware.Sensor.TYPE_ACCELEROMETER){                          if((Math.abs(values[0])>17||Math.abs(values[1])>17||Math.abs(values[2])>17)){                  Log.d("sensor ", "============ values[0] = " + values[0]);                  Log.d("sensor ", "============ values[1] = " + values[1]);                  Log.d("sensor ", "============ values[2] = " + values[2]);                  tv.setText("搖一搖"+"\n"+values[0]+"\n"+values[1]+"\n"+values[2]);                  //搖動手機後,再伴隨震動提示~~                  vibrator.vibrate(500);              }          } }@Overridepublic void onAccuracyChanged(android.hardware.Sensor sensor, int accuracy) {// TODO Auto-generated method stub}}




android Sensor一些手機感應效果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.