Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android利用傳感器實現微信搖一搖功能

Android利用傳感器實現微信搖一搖功能

編輯:關於Android編程

本文實例為大家分享了Android微信搖一搖功能的實現方法,供大家參考,具體內容如下

import java.util.ArrayList;  
import java.util.List;  
import java.util.Random;  
import android.app.Activity;  
import android.app.Service;  
import android.content.res.Resources;  
import android.hardware.Sensor;  
import android.hardware.SensorEvent;  
import android.hardware.SensorEventListener;  
import android.hardware.SensorManager; 
import android.os.Bundle;  
import android.os.Vibrator;  
import android.view.View;  
import android.widget.Button;  
 
//需要實現SensorEventListener接口 
 
public class LoversChoise extends Activity implements SensorEventListener{ 
 
   
    Button clear; 
 
    //定義sensor管理器 
 
  private SensorManager mSensorManager; 
 
  //震動 
 
  private Vibrator vibrator; 
 
     public void onCreate(Bundle savedInstanceState) { 
 
        super.onCreate(savedInstanceState); 
 
        setContentView(R.layout.loverschoise); 
 
       //獲取傳感器管理服務 
 
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
 
        //震動 
 
        vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); 
 
        clear = (Button) findViewById(R.id.clear); 
 
        clear.setOnClickListener(new Button.OnClickListener(){ 
 
        @Override 
 
        public void onClick(View arg0) { 
 
         // TODO Auto-generated method stub 
 
        //點擊button後,給button按鈕設置了text 
 
       clear.setText("現在給button的text賦值喽~"); 
 
    }); 
 
@Override 
 
protected void onResume(){ 
 
 super.onResume(); 
 
 //加速度傳感器 
 
 mSensorManager.registerListener(this,  
 
 mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),  
 
 //還有SENSOR_DELAY_UI、SENSOR_DELAY_FASTEST、SENSOR_DELAY_GAME等, 
 
 //根據不同應用,需要的反應速率不同,具體根據實際情況設定 
 
 SensorManager.SENSOR_DELAY_NORMAL); 
 
} 
 
@Override 
 
protected void onStop(){ 
 
 mSensorManager.unregisterListener(this); 
 
 super.onStop(); 
 
} 
 
@Override 
 
protected void onPause(){ 
 
 mSensorManager.unregisterListener(this); 
 
 super.onPause(); 
 
} 
 
@Override 
 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
 
 // TODO Auto-generated method stub 
 
 //當傳感器精度改變時回調該方法,Do nothing. 
 
} 
 
@Override 
 
public void onSensorChanged(SensorEvent event) { 
 
 // TODO Auto-generated method stub 
 
 int sensorType = event.sensor.getType(); 
 
 //values[0]:X軸,values[1]:Y軸,values[2]:Z軸 
 
 float[] values = event.values; 
 
 if(sensorType == Sensor.TYPE_ACCELEROMETER){ 
 
 
 /*因為一般正常情況下,任意軸數值最大就在9.8~10之間,只有在你突然搖動手機 
 
 *的時候,瞬時加速度才會突然增大或減少。 
 
 *所以,經過實際測試,只需監聽任一軸的加速度大於14的時候,改變你需要的設置 
 
 *就OK了~~~ 
 
 */ 
 
  if((Math.abs(values[0])>14||Math.abs(values[1])>14||Math.abs(values[2])>14)){ 
 
 
  //搖動手機後,設置button上顯示的字為空 
 
  clear.setText(null); 
 
  //搖動手機後,再伴隨震動提示~~ 
 
  vibrator.vibrate(500); 
 
  } 
 
 } 
 
} 
 
} 

現在的不少應用都用到了搖動手機改變內容的功能,比如微信中的“搖一搖”功能。前兩天要實現這個功能,稍微看了一下關於傳感器Sensor的內容。

傳感器有幾種類型:

       方向傳感器:   Sensor.TYPE_ORIENTATION
       加速度(重力)傳感器: Sensor.TYPE_ACCELEROMETER
       光線傳感器:    Sensor.TYPE_LIGHT
       磁場傳感器:   Sensor.TYPE_MAGNETIC_FIELD
       距離(臨近性)傳感器: Sensor.TYPE_PROXIMITY
       溫度傳感器:   Sensor.TYPE_TEMPERATURE

在搖動手機的功能中,我們只用加速度傳感器就行了~~

加速度傳感器返回值的單位是加速度的單位 m/s^2(米每二次方秒),有三個方向的值分別是

  values[0]: x-axis 方向加速度
  values[1]: y-axis 方向加速度
  values[2]: z-axis 方向加速度

其中x,y,z方向的定義是以水平放置在的手機的右下腳為參照系坐標原點

  x 方向就是手機的水平方向,右為正
  y 方向就是手機的水平垂直方向,前為正
  y 方向就是手機的空間垂直方向,天空的方向為正,地球的方向為負

所以說,你的手機放置的空間位置不同,它三個方向的加速度也不同。在這裡,三個方向的加速度,與我們傳統意義上的加速度(9.8m/s2)有所區別,需細細品味
以上是搖動手機後清除TextView的文字的代碼。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved