android Sensor一些手机感应效果

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;
    @Override
    protected 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() {
             
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                tv.setText("文本复原");
            }
        });
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
    }
    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(this, sensorManager.getDefaultSensor(android.hardware.Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
    }
    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this);
    }
    @Override
    public 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);  
            }  
        } 
    }
    @Override
    public void onAccuracyChanged(android.hardware.Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub
         
    }
     
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值