利用Sensor实现android手机类似于微信摇一摇


出处:http://blog.csdn.net/jamin0107/article/details/7297367

传感器有几种类型:
方向传感器: Sensor.TYPE_ORIENTATION
加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER
光线传感器: Sensor.TYPE_LIGHT
磁场传感器: Sensor.TYPE_MAGNETIC_FIELD
距离(临近性)传感器: Sensor.TYPE_PROXIMITY
温度传感器: Sensor.TYPE_TEMPERATURE

 

这里我们利用的是加速度传感器

 

 

[java]  view plain copy
  1. package com.jamin.sensor;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.Service;  
  5. import android.hardware.Sensor;  
  6. import android.hardware.SensorEvent;  
  7. import android.hardware.SensorEventListener;  
  8. import android.hardware.SensorManager;  
  9. import android.os.Bundle;  
  10. import android.os.Vibrator;  
  11. import android.util.Log;  
  12. import android.view.View;  
  13. import android.widget.Button;  
  14. import android.widget.TextView;  
  15.   
  16. public class SensorTestActivity extends Activity implements SensorEventListener{  
  17.     /** Called when the activity is first created. */  
  18.   
  19.   
  20.     TextView tv = null;  
  21.     Button button = null;  
  22.     SensorManager sensorManager = null;  
  23.     Vibrator vibrator = null;  
  24.   
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.main);  
  29.   
  30.         button = (Button) findViewById(R.id.button1);  
  31.         tv = (TextView) findViewById(R.id.textview1);  
  32.         button.setOnClickListener(new View.OnClickListener() {  
  33.   
  34.             @Override  
  35.             public void onClick(View v) {  
  36.   
  37.                 // TODO Auto-generated method stub  
  38.                 tv.setText("文本复原");   
  39.             }  
  40.         });  
  41.   
  42.         sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);  
  43.         vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);  
  44.   
  45.   
  46.     }  
  47.   
  48.   
  49.   
  50.   
  51.   
  52.   
  53.     @Override  
  54.     protected void onPause() {  
  55.   
  56.         // TODO Auto-generated method stub  
  57.         super.onPause();  
  58.         sensorManager.unregisterListener(this);  
  59.     }  
  60.   
  61.   
  62.   
  63.   
  64.   
  65.   
  66.     @Override  
  67.     protected void onResume() {  
  68.   
  69.         // TODO Auto-generated method stub  
  70.         super.onResume();  
  71.         sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);  
  72.   
  73.     }  
  74.   
  75.   
  76.   
  77.   
  78.   
  79.   
  80.     @Override  
  81.     public void onAccuracyChanged(Sensor sensor, int accuracy) {  
  82.         //当传感器精度改变时回调该方法,Do nothing.  
  83.     }  
  84.   
  85.   
  86.   
  87.     @Override  
  88.     public void onSensorChanged(SensorEvent event) {  
  89.   
  90.           
  91.         int sensorType = event.sensor.getType();  
  92.         //values[0]:X轴,values[1]:Y轴,values[2]:Z轴  
  93.         float[] values = event.values;  
  94.         if(sensorType == Sensor.TYPE_ACCELEROMETER){              
  95.             if((Math.abs(values[0])>17||Math.abs(values[1])>17||Math.abs(values[2])>17)){  
  96.                 Log.d("sensor ""============ values[0] = " + values[0]);  
  97.                 Log.d("sensor ""============ values[1] = " + values[1]);  
  98.                 Log.d("sensor ""============ values[2] = " + values[2]);  
  99.                 tv.setText("摇一摇");  
  100.                 //摇动手机后,再伴随震动提示~~  
  101.                 vibrator.vibrate(500);  
  102.             }  
  103.   
  104.   
  105.         }  
  106.     }  
  107.   
  108.   
  109.   
  110.   
  111.   
  112.   
  113.   
  114. }  


记得在onresume和onpause的时候开关sensor的监听事件。

如果想调整sensor的敏感程度,就去修改,value[0,1,2] 大于的上限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值